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