比较安全的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
  • 需要根据自己的系统,修改一下各个变量的定义。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章