比較安全的rm腳本(附上源碼及用法)

 
logger ()
{
time=`TZ="Asia/Shanghai" date +"%Y-%m-%d %T"`;
echo "[$time] $*"
}
 
rm ()
{
local limit=50;
if [ -d $HOME/.local/share/Trash/files ]; then
trash="$HOME/.local/share/Trash/files";
else
trash="$HOME/.Trash";
fi;
local log="/var/log/trash.log";
while [[ ! -z "$1" ]]; do
if [[ ! -d "$1" ]]; then
if [[ ! -f "$1" ]]; then
shift;
continue;
fi;
fi;
full=`readlink -f "$1"`;
base=`basename "$full"`;
if [[ -n ` echo "$base" |grep "\." ` ]]; then
new=`echo "$base" |sed -e "s/\([^.]*$\)/$RANDOM.\1/" `;
else
new="$base.$RANDOM";
fi;
trash_file="$trash/$new";
local fs=`du -BM -s "$full" |awk -FM '{print $1}'`;
if [ "$fs" -gt "$limit" ]; then
read -p "File/Folder is ${fs}Mb, too large. rm it permanently? [Y/n]" answer;
case "$answer" in
"Y" | "" | "y")
/bin/rm -rv "$full";
logger "'$full' removed permanently"
;;
*)
logger "aborted from deleting $full"
;;
esac;
shift;
continue;
fi;
mv "$full" "$trash_file";
if [ $? -eq 0 ]; then
if [ -w "$log" ]; then
logger "$full => [$trash_file]" | tee -a "$log";
else
logger "$full => [$trash_file]";
fi;
else
logger "Error deleting $full";
fi;
shift;
done
}
  • 將下面的代碼貼至~/.bashrc 或 ~/.bash_profile中,然後刷新該文件source ~/.bashrc即可。
  • 臨時取消自定義的rm:可以使用前文所說的/bin/rm或在當前環境下取消該function的定義:unset -f rm
  • 需要根據自己的系統,修改一下各個變量的定義。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章