GNU/Linux >> Linux の 問題 >  >> Linux

特定の日付のファイルを検索して削除する

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

まず、作成されたファイルを検索します 作成時間は通常どこにも保存されていないか、取得するのが難しいため、特定の時間に作成するのは少し難しいです。あなたが持っているのは mtime です 、または最終更新時刻、および ctime これは「変更」時間であり、inode への変更で更新されます。私はあなたが修正時間を欲しがっていると仮定します。

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-delete-newerXY 少なくとも GNU find と OS X の BSD find には存在します。)

もちろん、実際に日付のテキスト表現を解析することはできますが、ls 一部のジョーカーが印刷できない文字を含むファイルを作成した場合、正しく取得するのが難しくなります。確かに、サンプル ファイルにはそのようなものはありませんが、一般に、特に /tmp では誰でも作成できます。 .

(ただし | xargs rm では これらのファイルを見逃すだけです。また、ファイル名にスラッシュを含めることはできないため、誰もあなたの rm を指すのは難しいでしょう。 別のディレクトリに移動します。)


ただ bash ループ

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

Linux
  1. Lsのある日付の後に作成されたファイルのみを取得するにはどうすればよいですか?

  2. レンジャーで特定のフォルダ内のファイルを並べ替えますか?

  3. Linux で find コマンドを使用して、スペースのあるファイルを検索して削除する

  1. findコマンドを使用してLinux上のファイルとディレクトリを検索します

  2. 特定の日に変更されたすべてのファイルを取得しますか?

  3. 特定のユーザーが書き込み可能なすべてのファイルとディレクトリを見つけるにはどうすればよいですか?

  1. ファイルを検索してコピーする

  2. ファイルを検索して tar (スペースを含む)

  3. ls と grep を使用して実行可能ファイルを見つける