linux系統的rm命令太危險,一不小心就會刪除掉系統文件。 寫一個shell腳本來替換系統的rm命令,要求當刪除一個文件或者目錄時,都要做一個備份,然後再刪除。
1. 簡單的實現:
假設有一個大的分區/data/,每次刪除文件或者目錄之前,都要先在/data/下面創建一個隱藏目錄,以日期/時間命名,比如/data/.201703271012/,然後把所有刪除的文件同步到該目錄下面,可以使用rsync -R 把文件路徑一同同步,示例:
#!/bin/bash
filename=$1
now=`date +%Y%m%d%H%M`
read -p "Delete the file or directory $1? yes or no:" input
if [ $input == "yes" ] || [ $input == "y" ]
then
mkdir -p /data/.$now
rsync -aR $1/ /data/.$now/$1/
/bin/rm -rf $1
elif [ $input == "no" ] || [ $input == "n" ]
then
exit 0
else
echo "Please input yes or no"
exit
fi
1. now=`date +%Y%m%d%H%M`:控制日期的格式
date +"%Y_%m_%d_%H_%M" :2019_07_24_00_15
date +"%Y_%m_%d_%H_%M_%S":2019_07_24_00_15_48
date +"%Y%m%d_%H_%M_%S" :20190724_00_16_01
2. read -p "Delete the file or directory $1? yes or no:" input
shell read命令詳解:read命令 -p(提示語句) -n(字符個數) -t(等待時間) -s(不回顯)
read命令接收標準輸入(鍵盤)的輸入,或其他文件描述符的輸入(後面在說)。得到輸入後,read命令將數據放入一個標準變量中。下面是read命令的最簡單形式:
#!/bin/bash
echo -n "Enter your name:" //參數-n的作用是不換行,echo默認是換行
read name //從鍵盤輸入
echo "hello $name,welcome to my program" //顯示信息
exit 0 //退出shell程序。
2.1 計時輸入.
使用read命令存在着潛在危險。腳本很可能會停下來一直等待用戶的輸入。如果無論是否輸入數據腳本都必須繼續執行,那麼可以使用-t選項指定一個計時器。-t選項指定read命令等待輸入的秒數。當計時滿時,read命令返回一個非零退出狀態;
#!/bin/bash
if read -t 5 -p "please enter your name:" name
then
echo "hello $name ,welcome to my script"
else
echo "sorry,too slow"
fi
exit 0
2.2 設置read命令計數輸入的字符
當輸入的字符數目達到預定數目時,自動退出,並將輸入的數據賦值給變量。
read
-
n1
-
p
"Do you want to continue [Y/N]?"
answer
3. mkdir -p /data/.$now
cd /:根目錄 cd:用戶目錄
如使用mkdir建立一個多級目錄則要使用-P命令 如:
mkdir /lcp 是在根(/)目錄下建立一個名爲lcp的文件夾
mkdir -p /lcp/abc 則是在根(/)目錄下建一個名爲lcp的文件夾同時在此文件夾中建立名爲abc的文件夾
4. rsync -aR $1/ /data/.$now/$1/
rsync命令是一個遠程數據同步工具,可通過LAN/WAN快速同步多臺主機間的文件。rsync使用所謂的“rsync算法”來使本地和遠程兩個主機之間的文件達到同步,這個算法只傳送兩個文件的不同部分,而不是每次都整份傳送,因此速度相當快。 rsync是一個功能非常強大的工具,其命令也有很多功能特色選項。
-a:歸檔模式下,歸檔模式允許遞歸地拷貝文件,同時也保留了符號鏈接,文件權限,用戶組所有權和時間戳
-R, --relative 使用相對路徑信息。
【`】,學名叫“倒引號”, 如果被“倒引號”括起來, 表示裏面需要執行的是命令。
比如 `dirname $0`, 就表示需要執行 dirname $0 這個命令
【“”】 , 被雙引號括起來的內容, 裏面 出現 $ (美元號: 表示取變量名) `(倒引號: 表示執行命令) \(轉義號: 表示轉義), 其餘的才表示字符串。
【’‘】, 被單引號括起來的內容, 裏面所有的都表示串, 包括上面所說的 三個特殊字符。
執行:
$ sudo ./study2 xx5.txt
#xx5.txt就是需要刪除的文件
然後去根目錄下,查看隱藏文件:
$ cd /
$ ls
bin data dev home
$ cd data
$ ll -a
總用量 28
drwxr-xr-x 7 root root 4096 11月 12 17:38 .
dr-xr-xr-x 20 root root 4096 11月 12 16:35 ..
drwxr-xr-x 3 root root 4096 11月 12 16:35 .201911121635
drwxr-xr-x 3 root root 4096 11月 12 16:37 .201911121637
drwxr-xr-x 3 root root 4096 11月 12 16:53 .201911121653
drwxr-xr-x 3 root root 4096 11月 12 17:38 .201911121738
drwxr-xr-x 2 root root 4096 11月 12 16:47 x.txt
#命令ll -a是查看所有文件,包含隱藏文件