その名前でAug 7
生成されたファイルを削除する方法DBG_A_sql*
/tmp
たとえば、
-rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2135
-rw-r--r-- 1 root root 15283 Aug 7 11:22 DBG_A_sql.2373
-rw-r--r-- 1 root root 51091 Aug 7 11:22 DBG_A_sql.2278
-rw-r--r-- 1 root root 9103 Aug 7 11:22 DBG_A_sql.2485
-rw-r--r-- 1 root root 9116 Aug 7 11:22 DBG_A_sql.2573
-rw-r--r-- 1 root root 9140 Aug 7 11:22 DBG_A_sql.2679
-rw-r--r-- 1 root root 15695 Aug 7 11:22 DBG_A_sql.2897
答え1
あなたはそれを使用することができますfind
。お客様の要件と目的に応じて日付を計算し、
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -print
確認後削除して、
find /tmp -maxdepth 1 -mtime -1 -type f -name "DBG_A_sql*" -delete
答え2
まずファイルを探してください作られた作成時間は通常どこにも保存されないか入手しにくいため、特定の時間にするのは少し難しいです。あなたが持っているのは、inodeの変更に応じて更新された「変更された」時間であるmtime
最後の修正時間です。ctime
時間を修正したいとします。
find
真夜中に作成されたファイルを正しく処理するのは難しいようです。
相対時間(昨日など)がわかっている場合は使用できますが、
find -daystart -mtime 1
ファイルが誤って真夜中ですAug 8 00:00
。しかし、これはうまくいくようです。
find dir/ -daystart -mtime +0 \! -mtime +1 -ls
相対時間を計算したくないので、次のような場合がfind
あります-newerXY
。
find dir/ -newermt 'Aug 7 00:00' \! -newermt 'Aug 8 00:00' -ls
繰り返しますが、比較は「最新または既存」ではなく「最新」であるため、真夜中に生成されたファイルに対してエラーが発生します。システムに1秒未満の精度タイムスタンプがある場合、これを達成するのは難しいかもしれませんが、次のようにtouch
生成されたファイルを使用してテストするとこれが発生します。
難しい解決策は次のとおりです。
find dir/ -newermt 'Aug 6 23:59:59.999999999' \! -newermt 'Aug 7 23:59:59.999999999' -ls
-name "DBG_A_sql*"
とにかく正しい名前のファイルのみを取得するには、必要な項目を追加してください。-ls
最後のファイルを置き換えて、-delete
ファイルを一覧表示するのではなく削除できます。 (-ls
およびOS Xの少なくともGNU検索とBSD検索に存在します。-delete
)-newerXY
もちろん、日付のテキスト表現を実際に解析することはできますが、一部の道化師がls
印刷できない文字を含むファイルを生成すると、正しく解析するのは難しいでしょう。もちろん、サンプルファイルにはそのようなファイルはありませんが、一般的に誰でも特に/tmp
。
(| xargs rm
しかし、ファイルを見逃す可能性があり、ファイル名にスラッシュを含めることはできないため、誰かが別のディレクトリを指すのは難しいでしょう。rm
)
答え3
ただ bash ループ
for file in /tmp/DBG_A_sql* ; do
[ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done
答え4
合格したと仮定作られた、あなたの言葉は最後の変更(報告された時間ですls -l
。)ここでは次のようになりますzsh
。
autoload age # best in ~/.zshrc
rm /tmp/DBG_A_sql*(e:age 2016-08-07:)