ディレクトリをバックアップし、ファイルが存在することを確認するシェルスクリプト

ディレクトリをバックアップし、ファイルが存在することを確認するシェルスクリプト

生成されたバックアップファイルをディレクトリにコピーする前に、スクリプトは最初に同じ名前のファイルが存在しないことを確認する必要があります。 (スクリプトを初めて作成する場合です。)

#!/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コマンドを実行する前に確認することをお勧めします。より良いオプション。

おすすめ記事