193

次の名前のディレクトリがあります。

2012-12-12
2012-10-12
2012-08-08

bash シェル スクリプトを使用して、10 日以上経過したディレクトリを削除するにはどうすればよいですか?

4

5 に答える 5

448

これはあなたのために再帰的にそれを行います:

find /path/to/base/dir/* -type d -ctime +10 -exec rm -rf {} \;

説明:

  • find: ファイル/ディレクトリ/リンクなどを検索するための unix コマンド。
  • /path/to/base/dir: 検索を開始するディレクトリ。
  • -type d: ディレクトリのみを検索
  • -ctime +10: 変更時間が 10 日より古いもののみを考慮する
  • -exec ... \;: 見つかった結果ごとに、次のコマンドを実行します。...
  • rm -rf {}: ディレクトリを再帰的に強制的に削除します。その{}部分は、検索結果が前の部分から代入される場所です。

または、次を使用します。

find /path/to/base/dir/* -type d -ctime +10 | xargs rm -rf

次のようになるため、これはもう少し効率的です。

rm -rf dir1 dir2 dir3 ...

とは対照的に:

rm -rf dir1; rm -rf dir2; rm -rf dir3; ...

メソッドのように-exec


の最新バージョンでは、をfindに置き換えることができ、呼び出しと同等のことを行い、各 exec システム コールに収まる数のファイルを渡します。;+xargs

find . -type d -ctime +10 -exec rm -rf {} +
于 2012-12-13T21:44:01.760 に答える
52

/path/to/baseたとえば、 の下のすべてのサブディレクトリを削除する場合

/path/to/base/dir1
/path/to/base/dir2
/path/to/base/dir3

ただし、ルートを削除したくない場合は、オプション/path/to/baseを追加する必要があります。これにより、以下のサブディレクトリのみにアクセスできます-mindepth 1-maxdepth 1/path/to/base

-mindepth 1一致からルートを除外し/path/to/baseます。

-maxdepth 1などの直下のサブディレクトリのみに一致しますが、これらのサブディレクトリを再帰的にリストすることはありません。したがって、これらのサブディレクトリの例はリストされません。/path/to/base/path/to/base/dir1/path/to/base/dir2/path/to/base/dir3

/path/to/base/dir1/dir1
/path/to/base/dir2/dir1
/path/to/base/dir3/dir1

など。

/path/to/baseそのため、10 日以上経過しているすべてのサブディレクトリを削除するには;

find /path/to/base -mindepth 1 -maxdepth 1 -type d -ctime +10 | xargs rm -rf
于 2013-09-12T15:10:24.817 に答える
26

find-delete操作をサポートするため、次のようになります。

find /base/dir/* -ctime +10 -delete;

ファイルも10日以上古い必要があるという問題があると思います。試したことはありません。誰かがコメントで確認するかもしれません。

ここで最も投票数の多いソリューションが欠落しているため、削除後にすべてのサブディレクトリ-maxdepth 0を呼び出します。rm -rfそれは意味がないので、私は提案します:

find /base/dir/* -maxdepth 0  -type d -ctime +10 -exec rm -rf {} \;

上記の-deleteソリューションは、ディレクトリが空ではないと不平を言う-maxdepth 0ため、使用しません。find代わりに、それはボトムアップから暗示-depthして削除します。

于 2016-05-10T08:45:11.513 に答える
3

特にファイルとフォルダー名に改行またはスペースが含まれている場合、上記のスクリプトと他のスクリプトを使用してこれを正しく行うのに苦労していました。

最後に tmpreaper に出くわしましたが、これまでのところかなりうまく機能しています。

tmpreaper -t 5d ~/Downloads


tmpreaper  --protect '*.c' -t 5h ~/my_prg

元のソースリンク

ディレクトリを再帰的にチェックして一覧表示する test のような機能があります。シンボリックリンク、ファイル、またはディレクトリを削除する機能、および削除中に特定のパターンの保護モードを削除する機能

于 2014-02-20T11:21:34.150 に答える