2017-07-27 10 views
0

bashでは、作成された最新の5つのディレクトリ以外のすべてのディレクトリを削除しましたか?最新の10以外のすべてのディレクトリを削除する

これはビルドスクリプトで使用されており、古いビルドをクリアする必要があります。ありがとう。

編集:日付の変更時刻も問題ありません。

答えて

1

ファイル作成時間を得るのは簡単ではない。ここをクリックして参考にしてください: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 */リストディレクトリ空ではない)
  • +1

    5を先にスキップして開始することがあります6行目 –

    0

    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を除くすべての要素を取得する。

    関連する問題