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")

しかし、これはまだ「恋愛」の本質的な問題を解決しません。やや2時間前」は13:00:00から12:59:59まで1秒かかるため、「2017-11-20_13*」パターンと一致しません。

私は以下を使用することを検討しますfind

 find . -name "*.tar"  -maxdepth 0 -cmin +120 -delete

2時間より古い現在のディレクトリのすべての* .tarファイルは削除する必要があります(1分の猶予期間には+119を使用)。また、-deleteこの方法が機能しているかどうかをテストするときは省略できます。

答え2

問題は$DATE最後の行の変数拡張にあると思います。これをテストするには、echoコマンドを前に追加しrmてスクリプトを実行するか、コマンドの代わりに${DATE}$DATE使用してrm問題を防ぐことができます。

問題は、2つの異なる日付出力形式を指定するのと同じように、存在しないファイル名を削除しようとしている可能性があり、tarファイルの作成と2番目以降の削除の間に日付形式が一致する必要があると仮定します。時間。

関連情報