bashでは、作成された最新の5つのディレクトリ以外のすべてのディレクトリを削除しましたか?最新の10以外のすべてのディレクトリを削除する
これはビルドスクリプトで使用されており、古いビルドをクリアする必要があります。ありがとう。
編集:日付の変更時刻も問題ありません。
bashでは、作成された最新の5つのディレクトリ以外のすべてのディレクトリを削除しましたか?最新の10以外のすべてのディレクトリを削除する
これはビルドスクリプトで使用されており、古いビルドをクリアする必要があります。ありがとう。
編集:日付の変更時刻も問題ありません。
ファイル作成時間を得るのは簡単ではない。ここをクリックして参考にしてください:https://unix.stackexchange.com/questions/20460/how-do-i-do-a-ls-and-then-sort-the-results-by-date-created
しかし、最後の修正時間(ここではうまくいくはずですか?)に満足すれば、このワンライナーのようなものが必要です。
tail -n +6
プリントすべてが、最後の5行、これらのdirsのそれぞれにxargs rmdir
通話rm -r
(または、彼らは「場合はrm -r
を使用することができるためには、それらを示しています-t
ls -dt */ | tail -n +6 | xargs rmdir
ls -d */
リストディレクトリ空ではない)lsで行うことはできますが、ls出力の解析は安全ではありません。
perlを使用して解決策をファイル時間を取得するためのシェル組み込み関数がないので。
perl -e '
@A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>;
rmdir for splice (@A,0,-10)
'
テスト
mkdir tmp && cd tmp
for d in {A..Z}; do mkdir "$d"; done
ls
perl -e '
@A = sort {(stat($a))[9]<=>(stat($b))[9]} <*/>;
rmdir for splice (@A,0,-10)
'
ls
EDIT:splice(@A,0,-10)
が読みやすいかもしれない、@A[0..$#A-10]
に変更することができます。最後の10を除くすべての要素を取得する。
5を先にスキップして開始することがあります6行目 –