自定義rm命令
linux系統的rm命令太危險,一不小心就會刪除掉系統文件。 寫一個shell腳本來替換系統的rm命令,要求當刪除一個文件或者目錄時,都要做一個備份,然後再刪除。下面分兩種情況,做練習:
1. 簡單的實現:
假設有一個大的分區/data/,每次刪除文件或者目錄之前,都要先在/data/下面創建一個隱藏目錄,以日期/時間命名,比如/data/.20170327/,然後把所有刪除的文件同步到該目錄下面,可以使用rsync -R 把文件路徑一同同步,示例
#!/bin/bash
#name:南宮乘風
#email:[email protected]
fileName=$1
now=`date +%Y%y%d`
dir=$(/data/$now)
read -p "你確定刪除這文件或者目錄嗎 $1 ? yes|no :" input
if [ $input == "yes" ] || [ $input == "y" ]; then
# 判斷目錄是否存在
if [ ! -d $dir ]; then
mkdir /data/$now
fi
# rsync同步要刪除的文件和目錄
rsync -aR $1/ /data/$now/$1/
rm -rf $1
elif [ $input == "no" ] || [ $input == "n" ]; then
# 選擇no退出
exit 0
else
# 如果選擇別的輸入符,提示
echo "只能輸入yes或者no"
exit 0
fi
2.複雜的實現:
不知道哪個分區有剩餘空間,在刪除之前先計算要刪除的文件或者目錄大小,然後對比系統的磁盤空間,如果夠則按照上面的規則創建隱藏目錄,並備份,如果沒有足夠空間,要提醒用戶沒有足夠的空間備份並提示是否放棄備份,如果用戶輸入yes,則直接刪除文件或者目錄,如果輸入no,則提示未刪除,然後退出腳本,示例:
#!/bin/bash
#name:南宮乘風
#email:[email protected]
now=$(date +%Y%m%d)
#判斷文件大寫
f_size=$(du -sk $dir | awk '{print $1}')
#判斷磁盤大小
disk_szie=$(df -k| grep -vi filesystem | awk '{print $4}'|sort -n|tail -n1)
#判斷最大的目錄在哪裏
big_filesystem=$(df -k|grep -vi filesystem | sort -n -k4 | tail -n1 | awk '{print $NF}')
#判斷文件大小和磁盤大小比較
if [ $f_size -lt $disk_szie ]; then
# 輸入選項,準備開始刪除工作
read -p "你確定刪除這文件或者目錄嗎 $1 ? yes|no :" input
if [ $input == "yes" ] || [ $input == "y" ]; then
# 判斷存放目錄是否存在
if [ ! -d $big_filesystem/data/$now ]; then
# 不存在新建目錄
mkdir -p $big_filesystem/data/$now
fi
rsync -aR $1 $big_filesystem/$now/
rm -rf $1
#判斷輸入no的情況
elif [ $input == "no" ] || [ $input == "n"]; then
exit 0
else
# 如果選擇別的輸入符,提示
echo "只能輸入yes或者no"
fi
else
# 判斷磁盤空間不足的情況
echo "這磁盤沒有足夠的空間備份: $1."
read -p "你還想刪除"$1"嗎? yes|no :" input
if [ $input == "yes" ] || [ $input == "n" ]; then
# body
echo "$1將會在3秒後刪除,將不會有備份"
for i in `seq 1 5`; do echo -ne "."; sleep 1; done
rm -rf $1
elif [ $input == "no" ] || [ $input == "n" ]; then
echo "將不會刪除 $1."
exit 0
else
# 如果選擇別的輸入符,提示
echo "只能輸入yes或者no"
fi
fi
我的gitee:https://gitee.com/chengfeng99/Linux-DevOps
歡迎和我一起來討論學習