次の名前のディレクトリがあります。
2012-12-12
2012-10-12
2012-08-08
bash シェル スクリプトを使用して、10 日以上経過したディレクトリを削除するにはどうすればよいですか?
これはあなたのために再帰的にそれを行います:
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 {} +
/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
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
して削除します。
特にファイルとフォルダー名に改行またはスペースが含まれている場合、上記のスクリプトと他のスクリプトを使用してこれを正しく行うのに苦労していました。
最後に tmpreaper に出くわしましたが、これまでのところかなりうまく機能しています。
tmpreaper -t 5d ~/Downloads
tmpreaper --protect '*.c' -t 5h ~/my_prg
元のソースリンク
ディレクトリを再帰的にチェックして一覧表示する test のような機能があります。シンボリックリンク、ファイル、またはディレクトリを削除する機能、および削除中に特定のパターンの保護モードを削除する機能