web-dev-qa-db-ja.com

年に基づいてファイルを削除する

2009年に作成されたディレクトリ内のすべてのファイルを削除する必要があります。これを行うには、どのコマンドを使用できますか?

5
Viralk

ほとんどのファイルシステムはファイルの作成時刻を保存しないため、ファイルが最後に変更された時刻を確認するのが最善の方法です。

GNU find(LinuxまたはCygwinなど)またはFreeBSDまたはOSXの最新バージョンがある場合は、ファイルの日付を別のファイルの日付と直接比較できます。さらに、これらのバージョンof findは、システムで使用可能な場合、ファイル作成時間(誕生時間と呼ばれ、Bで示されます)を使用できます。変更を使用するには、以下のBmに置き換えます。誕生時間ではなく時間。

find /path/to/directory -newerBt '2009-01-01' ! -newerBt '2010-01-01' -type f -delete

最初に-deleteなしで一度実行して、これらが必要なファイルであることを確認します。上記のコマンドは、サブディレクトリ内のファイルも削除します。これが望ましくない場合は、ディレクトリ名の後に-mindepth 1 -maxdepth 1を追加します。

findのバージョンに-newerXYプライマリがない場合は、一致させる時間の範囲の境界をマークするタイムスタンプファイルを作成する必要があります。

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
find /path/to/directory -newer /tmp/from ! -newer /tmp/to -type f -exec rm {} +

Zshの glob qualifiers は時間間隔内のファイルと一致できますが、境界は現在の日付を基準にしてのみ示すことができます(例:[〜#〜] n [〜# 〜]日前)。

rm /path/to/directory/*(.m+566^m+931)

正確な日付にタイムスタンプファイルを使用することもできますが、簡潔さが失われます。

touch -t 200901010000 /tmp/from
touch -t 201001010000 /tmp/to
rm /path/to/directory/*(.e\''[[ $REPLY -nt /tmp/from && $REPLY -ot /tmp/to ]]'\')

他の人はfindと言っていますが、tmpwatchもチェックしてみてください。

1

適切なオプションを指定したfindコマンドは、必要なことを正確に実行できるはずです。

あなたは宿題のように質問を表現したので、手がかりの練習問題としてマニュアルページをよく読んでおくつもりです。 このチュートリアル @ jfgagneが提供するものはかなり役立つはずです。

0
Shadur