特定の日付のファイルの検索と削除

特定の日付のファイルの検索と削除

その名前で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:)

関連情報