回答:
これはあなたのために再帰的に行います:
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、あなたは置き換えることができ;て+、それが相当行いますxargs各execシステムコールに収まるように多くのファイルとして渡して、あなたのために電話を:
find . -type d -ctime +10 -exec rm -rf {} +
-mtime許可の変更ではなくコンテンツの変更をチェックするため、私にとってはより良かったです。
find /path/to/base/dir/*。
-mindepth 1(ではなく/path/to/folder/*)を使用することをお勧めします。
/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うONLYすぐ下のサブディレクトリに一致する/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/base10日より古いすべてのサブディレクトリを削除するには、
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ソリューションは、dirが空でないと不平を言う-maxdepth 0ので使用しませんfind。代わりに、それは暗黙の-depthうちにボトムアップで削除されます。
-delete動作は確認できましたが、あなたが言ったように、空のディレクトリを削除するためにのみ使用できますrmdir。
上記のスクリプトと他のスクリプトを使用してこれを正しく行うのに苦労していました。特に、ファイルとフォルダーの名前に改行またはスペースが含まれている場合はそうでした。
ついにtmpreaperに出くわしましたが、これまでのところかなりうまくいきました。
tmpreaper -t 5d ~/Downloads
tmpreaper --protect '*.c' -t 5h ~/my_prg
元のソースリンク
ディレクトリを再帰的にチェックしてリストするtestなどの機能があります。削除中にシンボリックリンク、ファイル、またはディレクトリ、および特定のパターンの保護モードを削除する機能
または
rm -rf `find /path/to/base/dir/* -type d -mtime +10`
更新された、より高速なバージョン:
find /path/to/base/dir/* -mtime +10 -print0 | xargs -0 rm -f
xargs --show-limits。
-print0/ -0は特殊なシェル文字を処理しませんか?
xargsバージョンが@mpenますが、最初の行はしません。
find名前を見なくてもそれができるので...