生成されたバックアップファイルをディレクトリにコピーする前に、スクリプトは最初に同じ名前のファイルが存在しないことを確認する必要があります。 (スクリプトを初めて作成する場合です。)
#!/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コマンドを実行する前に確認することをお勧めします。より良いオプション。