次のコマンドを使用して、1日より古いすべてのフォルダを削除します。
find /test -mmin +1440 | xargs rm -rf
ただし、find
の出力には/test
がリストされます(それに応じて削除されます)。
/test
のサブディレクトリのみを見つけるにはどうすればよいですか? (-maxdepth
/-mindepth
はAIXでは使用できません)
@meuhがコメントで述べたように、/test/*
の代わりに /test
。コマンドは次のようになります。
find /test/* -type d -mmin +1440 | xargs rm -rf
この場合、サブフォルダのみ of /test
は削除されます。
POSIXly:
find /test/. ! -name . -type d -mtime +0 -exec rm -rf {} \; -Prune
(私たちは、正常に削除されたディレクトリに-Prune
を使用します。これにより、find
は、それらが突然なくなったと文句を言わないようになります)。
いずれの場合も、ディレクトリファイルの変更時刻(上記の-mtime
で確認)は、エントリが最後に追加、削除、または名前変更された時刻のみを反映していることに注意してください。
リンクされているファイル(通常またはディレクトリなど)のコンテンツが変更されても、更新されません。特に、サブディレクトリまたはそのコンテンツに加えられた変更は、ディレクトリの変更時間には影響しません。
-mindepth
、-maxdepth
、および-mmin
はすべてGNU拡張機能です(他の一部の実装ではサポートされています)。
find . -maxdepth 1
と同等の標準は次のようになります。
find . -name . -o -Prune
-mindepth 1
の場合:
find . ! -name .
-mindepth 1 -maxdepth 1
の場合:
find . ! -name . -Prune
.
以外のディレクトリの場合は、上記のようにfind some/dir/. ...
を使用します。
深さの他の値については、-path
を使用できますが、最近標準に追加されたばかりなので、一部のシステム(AIXなど)にはまだそれがないことに注意してください。
対象:-maxdepth 2
:
find . ! -path '*/*/*' -o -Prune
対象:-mindepth 2
:
find . -path '*/*/*'
別のディレクトリの場合:
find some/dir//. -path '*//*/*/*'
まあ、-mminプライマリは、AIXではサポートされていない可能性が高いGNUismです。これは、BSDの人々と私がすでに1980年代に拡張として使用していたものと比較して、ばかげた拡張であるためです。 sfindがAIXで正常にコンパイルされるという事実を踏まえて、私は以下をお勧めします。
sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +
コードはschilytoolsの次の場所にあります https://sourceforge.net/projects/schilytools/files/
touch -t 201508260000 dummyfile
find /path/to/files -type f ! -newer dummyfile -delete
タイムスタンプ形式yyyyMMddhhmm
1行目は、2015年8月26日に最後に変更されたファイルを作成します。2行目は、/ path/to/file内で、dummyfileよりも新しい日付でないすべてのファイルを見つけて削除します。
正しく機能していることを再確認したい場合は、-delete
引数を指定すると、削除されるファイルがリストされます。
find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}