라 이브 러 리 삭제 에서 활주로 까지 작별 인 사 를 하고 Liux 휴지통 이 실현 되 었 습 니 다.
rm -rf
. 조심 하지 않 으 면 가 벼 운 사람 은 라 이브 러 리 를 삭제 하 는 것 부터 도망 가 는 것 까지 무 거 운 사람 은 도망 갈 기회 가 없습니다.방학 을 틈 타 실제 생산 환경 과 결합 하여 이전에 생각 했 던 win 휴지통 체 제 를 실현 해 보 세 요.사고의 방향 을 실현 하 다.
alias
에 게 별명 을 지어 주 고 rm
대신 스 크 립 트 my_rm.sh
로 실행 rm
호출 my_rm.sh
명령 rm
의 기본 기능, 예 를 들 어 rm
등 이다.또한 삭제 할 파일 을 정 의 된 휴지통 에 넣 습 니 다.(실제 사용 rm -rf
으로 mv
휴지통 에 넣 기 기능 추가) rm 의 실현: myrm.sh
이 스 크 립 트 가 구현 되 었 습 니 다.
rm
명령 으로 파일 및 폴 더 삭제 동작 을 진행 하 는 동시에 아 날로 그 지원 rm
, -r
등 매개 변수 -f
명령 을 사용 하여 삭 제 된 내용 의 점용 등 총 공간 크기 를 계산 합 니 다. 설정 du
을 통 해 파일 이 얼마 이상 일 때 직접 삭제 하고 휴지통 에 넣 지 않 습 니 다 #!/bin/bash
###############################################
# Filename : my_rm.sh
# Author : PedroQin
# Email : [email protected]
# Date : 2019-10-06 14:58:56
# Description :
# Version : 1.0.0
###############################################
trash_dir_main="/tmp/trash"
trash_dir="$trash_dir_main"/`date +%Y%m%d`
[ ! -d ${trash_dir} ] && mkdir -p ${trash_dir}
upper_limit="$[5000*1024]" ## unit : K
#### for this script env vaiable
RECURSIVE=0
FORCE=0
PROMPT_ONCE=0 # exclusive with FORCE var
PROMPT=0 # exclusive with FORCE var
###
rm_cmd="rm -i"
mv_cmd="mv -i"
###
function confirm ()
{
local ans=""
local -i ret=0
while [ -z "$ans" ]; do
read -p "$1" ans
boolean $ans
ret=$?
[ $ret -eq 255 ] && ans=""
done
#echo "$ans"
return $ret
}
function boolean()
{
case "$1" in
[tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE] | L6 | L10 | L12 )
return 0
;;
[fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE])
return 1
;;
esac
return 255
}
rm_index=0
while [ ! -z "$1" ];do
case "$1" in
-r|--recursive)
RECURSIVE=1
;;
-f|--force)
FORCE=1
;;
-fr|-rf)
RECURSIVE=1
FORCE=1
;;
-i)
PROMPT=1
;;
-I)
PROMPT_ONCE=1
;;
*)
let rm_index++
dir_file[$rm_index]="$1"
;;
esac
shift
done
err_code=0
suffix=`date "+%H%M%S"`
#echo $rm_index
for i in `seq 1 $rm_index`
do
dir_file_name=${dir_file[$i]}
#echo $dir_file_name
if [ ! -d "${dir_file_name}" ]&&[ ! -f "${dir_file_name}" ];then
echo "[${dir_file_name}] do not exist"
let err_code++
continue
else
file_name=`basename "${dir_file_name}"`
# check
if [ -d "$dir_file_name" -a ${RECURSIVE:-0} -eq 0 ] ;then
echo cannot remove \'"${dir_file_name}"\' Is a directory
let err_code++
continue
fi
echo -n "summary size... "
file_size=`du -sk "${dir_file_name}"|awk '{print $1}'`
echo "$file_size k"
# for large file/dir
if [ "$file_size" -ge "$upper_limit" ];then
if confirm "The file/dir size is $file_size > $upper_limit(upper_limit) ,delet it without mv to Trash?[Y|N]: " ;then
rm_para=""
[ "${RECURSIVE:-0}" -eq 1 ] && rm_para="$rm_para -r"
[ "${FORCE:-0}" -eq 1 ] && rm_para="$rm_para -f"
eval $rm_cmd "$rm_para" "${dir_file_name}" || let err_code++
continue
else
continue
fi
fi
if [ "${FORCE:-0}" -eq 0 ];then
if ! confirm "rm '"${dir_file_name}"'?[Y|N]: " ;then
continue
fi
fi
target_path=${trash_dir}/"${file_name}"_${suffix}_${RANDOM}
eval $mv_cmd "${dir_file_name}" ${target_path}
echo "[${dir_file_name}] delete completed, Trash path: ${target_path}"
fi
done
exit $err_code
휴지통 청소: cleantrash.sh
이 스 크 립 트 가 구현 되 었 습 니 다.
#!/bin/bash
###############################################
# Filename : clear_trash.sh
# Author : PedroQin
# Email : [email protected]
# Date : 2019-10-06 18:43:18
# Description :
# Version : 1.0.0
###############################################
trashdir=/tmp/trash
cd ${trashdir}
# files/dirs which modified 3 days ago ,delet
find ./ -mtime +3 -print0 |xargs -0 rm -rf {} \;
환경 가 져 오기
upper_limit
, 별명 수정 vim ~/.bashrc
alias rm="bash /root/my_rm.sh" #
rm
다음 행위 에 추 가 된 작업 입 니 다. 이 방법 은 루트 사용자 에 게 만 사 용 됩 니 다. 모든 사용자 가 vim /etc/crontab
명령 을 통 해 추가 할 수 있 습 니 다. 내용 은 이 처방 법 과 약간 다 릅 니 다. 예: crontab -e
수정 00 20 * * * bash /root/clean_trash.sh
보다 적 습 니 다 /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
00 20 * * * root bash /root/clean_trash.sh
systemctl restart crond.service
GitHub
https://github.com/pedroqin/shell_script/tree/master/linux_recycle_bin
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
용감한 바로 가기 및 우분투 응용 프로그램안녕하세요 여러분, 이 기사에서는 모든 사이트에서 pwa를 생성하고 실행기 응용 프로그램으로 추가하는 방법을 설명하고 싶습니다. 일부 웹사이트는 PWA로 설치를 허용하지 않지만 유사한 애플리케이션을 원합니다. 1. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.