シェルスクリプトでディレクトリをバックアップし、ファイルが存在するかどうかをチェックする

シェルスクリプトでディレクトリをバックアップし、ファイルが存在するかどうかをチェックする

結果のバックアップ ファイルをディレクトリにコピーする前に、スクリプトはまず同じ名前のファイルが存在しないことを確認する必要があります (スクリプトを書くのは初めてです)

#!/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、変数を変更する場合は 1 か所だけ変更する必要があります (絶対に推奨)

本当に tar コマンドを実行してファイルの存在を確認したい場合は、後で移動できるように一時的な場所に tar を実行したほうがよいでしょう。ただし、同じ名前のファイルがすでに存在する場合に tar ファイルで何もしない場合は、そのファイルを見つけるまでに多くの時間を無駄にする可能性があります。そのため、tar コマンドを実行する前に確認する方がよいオプションだと思います。

関連情報