web-dev-qa-db-ja.com

1日以上経過したフォルダを削除する

次のコマンドを使用して、1日より古いすべてのフォルダを削除します。

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

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

/testのサブディレクトリのみを見つけるにはどうすればよいですか? (-maxdepth/-mindepthはAIXでは使用できません)

5
Nir

@meuhがコメントで述べたように、/test/* の代わりに /test。コマンドは次のようになります。

find /test/* -type d -mmin +1440 | xargs rm -rf

この場合、サブフォルダのみ of /testは削除されます。

5
Matthias

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 '*//*/*/*'
7

まあ、-mminプライマリは、AIXではサポートされていない可能性が高いGNUismです。これは、BSDの人々と私がすでに1980年代に拡張として使用していたものと比較して、ばかげた拡張であるためです。 sfindがAIXで正常にコンパイルされるという事実を踏まえて、私は以下をお勧めします。

sfind . -mindepth 1 -type d -mtime +24h -exec rm -rf {} +

コードはschilytoolsの次の場所にあります https://sourceforge.net/projects/schilytools/files/

1
schily
touch -t 201508260000 dummyfile
find /path/to/files -type f ! -newer dummyfile -delete

タイムスタンプ形式yyyyMMddhhmm

1行目は、2015年8月26日に最後に変更されたファイルを作成します。2行目は、/ path/to/file内で、dummyfileよりも新しい日付でないすべてのファイルを見つけて削除します。

正しく機能していることを再確認したい場合は、-delete引数を指定すると、削除されるファイルがリストされます。

リンクからコピー

0
Valarpirai
find /test -type d -mtime +1| egrep -v '^/test$'|xargs -I{} rm -rf {}
0
Gregg Leventhal