1日を過ぎたフォルダを削除

1日を過ぎたフォルダを削除

次のコマンドを使用して、1日を過ぎたすべてのフォルダを削除したいと思います。

find /test -mmin +1440 | xargs rm -rf

findただし、リストの出力は/testそれに応じて削除されます。

サブディレクトリだけをどのように見つけることができますか/test? (-maxdepth/は-mindepthAIXでは使用できません)

答え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 {}

関連情報