結果のバックアップ ファイルをディレクトリにコピーする前に、スクリプトはまず同じ名前のファイルが存在しないことを確認する必要があります (スクリプトを書くのは初めてです)
#!/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 コマンドを実行する前に確認する方がよいオプションだと思います。