web-dev-qa-db-ja.com

特定の日付のファイルを見つけて削除する

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
5
yael

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
11
Rahul

まず、特定の時間にファイル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を別のディレクトリにポイントするのは難しいでしょう。)

6
ilkkachu

ただbashループ

for file in /tmp/DBG_A_sql* ; do
    [ "$(date -I -r "$file")" == "2016-08-07" ] && rm "$file"
done
4
Costas

createdとすると、last modified(つまり、 zsh付きのls -l)からの報告:

autoload age # best in ~/.zshrc
rm /tmp/DBG_A_sql*(e:age 2016-08-07:)
2