BASH - rm コマンドを使用した単純なスクリプトが機能しない

BASH - rm コマンドを使用した単純なスクリプトが機能しない

次のような簡単なスクリプトを作成しました:

#/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}$DATErm

問題は、存在しないファイル名を削除しようとしていることにも起因している可能性があります。2 つの異なる日付出力形式が指定されているようですが、日付形式は tar ファイルの作成時と 2 時間後の削除時の間で一致するはずであると想定しています。

関連情報