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

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

私のスクリプトのこのコマンド.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

答え2

マンページfind:

    Numeric arguments can be specified as

   +n     for greater than n,
   -n     for less than n,
    n     for exactly n.

  -mtime n
          File's data was last modified n*24 hours ago.  See the comments for 
          -atime to understand how rounding  affects  the  interpretation  of
          file  modification times.

   -atime n
          File was last accessed n*24 hours  ago.   When  find  figures  out  
          how  many 24-hour  periods  ago  the  file  was  last  accessed, any 
          fractional part is ignored, so to match -atime +1, a file has to have 
          been accessed at least two days ago.

これにより、-mtime +5対応するファイルが見つかります。最後の変更もっと5×24時間以上以前に-mtime -5最後に変更されたファイルを探します。少ない5×24時間前より。ファイルを変更した場合、コマンドはそのファイルが削除されないことを明確に述べています。コマンドを次のように変更することもできます。

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

関連情報