2014年9月24日より前のファイルを見つけて削除するスクリプトを作成しようとしています。どうすればいいですか?
答え1
2014年9月24日00:00に設定された時間でダミーファイルを作成し、更新されていないコンテンツを見つけて削除します。
#date format YYYYMMDDhhmm
touch -t 201409240000 dateref
find -type f ! -newer dateref -delete
find
このオプションを使用する前に、このオプションに注意してください-delete
。最後の場所にいる必要があり、結果を事前に確認する必要がない場合があります-delete
。
答え2
(対応する日付を含む参照ファイル)とともに、find
sオプションを使用して-newerを無効にすることができます。これを使用して参照ファイルを作成できます。たとえば、-newer
!
touch -d
touch -d "2014-09-23 23:59:59.999999999" /tmp/reference-file
find /path/to/directory/ ! -newer /tmp/reference-file -ls
less
スキャンのためにファイルにパイプまたはリダイレクトできます。
削除したいファイルだけが削除されることを確認してから、オプションを-ls
に変更してください。-delete
(2014年9月14日の真夜中に生成されたファイルを削除しても大丈夫なら、この方法は効果的です。touch -d 2014-09-24
これは! -newer
「前」を意味するだけでなく「前または同じ」を意味するためです。ほとんどの場合、.999999999が使用されます。になると言います。
注:上記は、およびすべてがGNUバージョンであるとfind
想定していますtouch
。他のバージョンでは動作する場合も動作しない場合もあります。 Linuxを使用している場合、GNUユーティリティは標準です(busybox
スペースを節約するために小さなディストリビューションまたは同様のディストリビューションを使用しない限り)。
からman find
:
-newer reference
現在のファイルの最後のデータ修正時間は、参照ファイルの最後のデータ修正時間よりも最近です。参照がシンボリックリンクであり、
-H
オプションまたは-L
オプションが有効な場合、参照が指すファイルの最後のデータ変更時間が常に使用されます。
-anewer
変更時間の代わりにアクセス時間を使用するには、同じマニュアルページも参照してください。
次の-newerXY
オプションも関連しています。
- 最新のXYリファレンス
検討中のファイルのタイムスタンプXが、ファイルが参照するタイムスタンプYより新しい場合は成功します。文字XとYは、次のいずれかです。
a The access time of the file reference B The birth time of the file reference c The inode status change time of reference m The modification time of the file reference t reference is interpreted directly as a time
一部の組み合わせは無効です。たとえば、to
X
beは無効ですt
。一部の組み合わせは、すべてのシステムで実装されているわけではありません。たとえば、B
すべてのシステムがそれをサポートしているわけではありません。無効またはサポートされていない組み合わせを指定すると、XY
致命的なエラーが発生します。
-d
時間仕様はGNUオプションの引数として解釈されますdate
。参照ファイルの生成時間を使用しようとしたが生成時間を確認できない場合は、致命的なエラーメッセージが表示されます。
検査中のファイルのビルド時間に関連するテストを指定すると、ビルド時間が不明なすべてのファイルに対してこのテストは失敗します。
答え3
次のスクリプトを試してください。
#!/bin/bash
d2=$(date +%s)
d1=$(date -d "2014-09-24" +%s)
d=$(( (d2 - d1) / 86400 ))
find ./ -mtime +$d -delete
まず、-delete
正しいファイルが見つかったことを確認してください。 100%確実な場合は追加し、検索の代わりに目的の-delete
パスを使用してください。./