回答:
これはあなたのために再帰的に行います:
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/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
ソリューションは、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
名前を見なくてもそれができるので...