このコマンドが期待どおりにファイルを削除しないのはなぜですか?

このコマンドが期待どおりにファイルを削除しないのはなぜですか?

私のスクリプトのこのコマンド.shしなければならない/home/backup/VBtestファイルを見つけて、.sql.gz5日以上経過したファイルを削除します。

find /home/backup/VBtest/*.sql.gz -mtime +5 -exec rm {} \;

しかしそれは真実ではない。警告やエラーは表示せず、音のない障害のみを表示します。 CentOS 6.6で動作しています。

編集する-コメントで推薦を受けた後、私もこれを試してみてfind '/home/backup/VBtest' -name '*.sql.gz' -mtime +5 rm {} \;得ましたfind: paths must precede expression: rm。また、ファイル作成時間(ファイル変更時間に基づく)のパラメータは何ですか?

ベストアンサー1

次のようにする必要があります。

find /home/backup/VBtest/  -name '*.sql.gz' -mtime +5 # -exec rm {} \;

(正しい結果が出たら、exec部分から#を削除してください。)これはディレクトリツリー全体をスキャンします。

/home/backup/VBtest/*.sql.gzそれ自体はシェル拡張になります(上記のfindコマンドと-max深さ1を使用するのとほぼ同じです)。次のことを学ぶことができます。

echo /home/backup/VBtest/*.sql.gz 

必要に応じて、純粋なシェルパスに移動できます。すべてのposixシェルはタイムスタンプを比較できるので([+-ntは「最新」または-ot「前」を意味します)、参照タイムスタンプのみが必要で、次のように拡張globをフィルタリングします。

touch /tmp/5dAgo --date '5 days ago'
trap 'rm -f /tmp/5dAgo' exit
for file in /home/backup/VBtest/*.sql.gz; do
   #remove the echo if this give the expected results
   [ "$file" -ot /tmp/5dAgo ] && echo rm "$file" 
done

おすすめ記事