私のスクリプトのこのコマンド.sh
はしなければならない/home/backup/VBtest
ファイルを見つけて、.sql.gz
5日以上経過したファイルを削除します。
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 {} \;