
次のような簡単なスクリプトを作成しました:
#/bin/bash
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
tar -czvf /kopie/bin-$DATE.tar /bin
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
rm -f /kopie/bin-$DATE*.tar
スクリプトの最後の行に問題があります。rm コマンドが機能せず、ファイルを削除しません。「2 時間前」の日付は正常に機能するため、これは問題ではありません。
答え1
ファイル名は 2 つの異なる方法で指定されているようです:
DATE=$(date --date="2 hours ago" +"%d-%m-%Y_%H")
上記では、例えば年と時間の間に _ があります。
しかし、生成した日付の形式は異なります。
DATE=$(date +"%d_%m_%Y-%H:%M:%S")
しかし、それでも「デート」という本質的な問題は解決されない。多かれ少なかれ13:00:00 から 12:59:59 までには 1 秒かかるため、「2017-11-20_13*」パターンには一致しないため、「2 時間前」となります。
以下を使用することを検討しますfind
:
find . -name "*.tar" -maxdepth 0 -cmin +120 -delete
現在のディレクトリにある 2 時間以上経過したすべての *.tar ファイルを削除します (1 分間の猶予時間を設定するには +119 を使用します)。また、-delete
この方法が機能するかどうかをテストするときに省略することもできます。
答え2
$DATE
問題は最後の行の変数の展開にあると思います。これをテストするには、コマンドecho
の前に を追加してスクリプトを実行するか、コマンド内での代わりにrm
を使用して問題を回避してください。${DATE}
$DATE
rm
問題は、存在しないファイル名を削除しようとしていることにも起因している可能性があります。2 つの異なる日付出力形式が指定されているようですが、日付形式は tar ファイルの作成時と 2 時間後の削除時の間で一致するはずであると想定しています。