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

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

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

ベストアンサー1

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

最新バージョンのGNU find(LinuxまたはCygwinなど)、FreeBSD、またはOSXがある場合は、あるファイルの日付を他のファイルの日付と直接比較できます。さらに、Bシステムで利用可能な場合、これらのfindバージョンはファイル作成時間(表示されているように作成時間と呼ばれます)を使用できます。出生時間の代わりに修正時間を使用するには、次のようBに置き換えます。m

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 {} +

ジッシュグローバル予選時間間隔内でファイルを照合することはできますが、現在の日付に基づいた境界のみを表示できます(例:窒素数日前)。

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 ]]'\')

おすすめ記事