Shell腳本備份目錄並檢查檔案是否存在

Shell腳本備份目錄並檢查檔案是否存在

在將生成的備份檔案複製到目錄之前,腳本應首先檢查以確保不存在同名檔案(這是我第一次編寫腳本)

#!/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 命令之前進行檢查是更好的選擇選項。

相關內容