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
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
まず、特定の時間にファイルcreatedを見つけるのは少し難しいです。作成時間は通常どこにも保存されないか、取得するのが難しいためです。あなたが持っているのはmtime
、または最終変更時刻、およびctime
は「変更」時刻であり、iノードへの変更で更新されます。私はあなたが修正時間を望んでいると仮定します。
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
繰り返しますが、これは真夜中に正確に作成されたファイルを間違ったものにします。システムにタイムスタンプのサブセカンド精度がある場合、それを達成するのは難しいかもしれませんが、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
、-delete
および-newerXY
は、少なくともGNU findおよびBSD findにOS Xで存在します。)
もちろん、実際に日付のテキスト表現を解析することもできますが、ls
を使用すると、ジョーカーが印刷不可能な文字を含むファイルを作成した場合に正しく理解できなくなります。もちろん、サンプルファイルにはそのようなファイルはありませんが、一般的には、特に/tmp
で誰でも作成できます。
(| xargs rm
を使用すると、これらのファイルが欠落するだけで、ファイル名にスラッシュを含めることができないため、rm
を別のディレクトリにポイントするのは難しいでしょう。)
ただbashループ
for file in /tmp/DBG_A_sql* ; do
[ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done
createdとすると、last modified(つまり、 zsh
付きのls -l
)からの報告:
autoload age # best in ~/.zshrc
rm /tmp/DBG_A_sql*(e:age 2016-08-07:)