在將生成的備份檔案複製到目錄之前,腳本應首先檢查以確保不存在同名檔案(這是我第一次編寫腳本)
#!/bin/bash
time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz
tar -czf $Dest/$filename /home/abc
read $file
if [ -f $file ]; then
echo "Error file $file already exist!"
else
mv $file /home/def
fi
答案1
您正在使用的命令將完成將目錄備份到目錄中的tar
實際工作。如果您想在「將生成的備份檔案複製到目錄」之前檢查該目錄中是否存在該檔案名,那麼您可能應該在運行該 tar 命令之前測試該檔案是否存在。例如:/home/abc
$filename
/home/def
#!/bin/bash
time=$(date +%m-%d-%y)
Backup_file=/home/abc
Dest=/home/def
filename=back-$time.tar.gz
if [ -f $filename ]; then
echo "Error file $filename already exist!"
else
tar -czf $Dest/$filename /home/abc
fi
不過,我可能會建議一些「改進」:
#!/bin/bash
today=$(date +%Y-%m-%d)
Backup_file=/home/abc
Dest=/home/def
filename=back-${Backup_file//\//_}-${today}.tar.gz
if [ -f ${filename} ]; then
echo "Error file ${filename} already exists!"
else
tar -czf ${Dest}/${filename} ${Backup_file}
fi
- 我已將日期格式更改為使用 4 位數年份,然後是月份,然後是日期(我的偏好)
- 正如@Nasir 所指出的,我還更改了變數名稱
- 如果您有多個區域可能在同一天備份,那麼備份檔案名稱可以顯示正在備份的區域,因此我的
filename
變數使用該Backup_file
變量,但將所有“/”實例替換為“_” (根據參數擴展部分man bash
和中提到的這個答案用於替換字元的所有實例) - 最後我在 tar 命令中使用了該
Backup_file
變量,因此如果您更改該變量,只需更改一個地方即可(絕對建議)
如果您確實想執行 tar 命令,然後檢查該檔案是否存在,您可能應該 tar 到一個臨時位置,以便稍後可以移動它。但是,如果您不打算對 tar 檔案執行任何操作(如果已存在同名檔案),那麼您可能會在發現該檔案之前浪費大量時間,因此我認為在運行 tar 命令之前進行檢查是更好的選擇選項。