次のコマンドを使用して、1日を過ぎたすべてのフォルダを削除したいと思います。
find /test -mmin +1440 | xargs rm -rf
find
ただし、リストの出力は/test
それに応じて削除されます。
サブディレクトリだけをどのように見つけることができますか/test
? (-maxdepth
/は-mindepth
AIXでは使用できません)
答え1
@meuhが彼のコメントで言ったように、代わり/test/*
に使用することができます/test
。コマンドは次のとおりです。
find /test/* -type d -mmin +1440 | xargs rm -rf
この場合サブフォルダのみ/test
削除されます。
答え2
POSIX的に:
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 '*//*/*/*'
答え3
まあ、-mminはほとんどGNUismで、AIXではサポートされていない可能性があります。なぜなら、BSDユーザーと私がすでに1980年代に使用していたものと比較すると、愚かな拡張だからです。 sfindがAIXでうまくコンパイルされることを考えると、次のことが提案されます。
sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +
コードはschilytoolsにあります。https://sourceforge.net/projects/schilytools/files/
答え4
find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}