最新の 4 つのディレクトリを除くすべてを削除します

StackOverflow https://stackoverflow.com/questions/71864

  •  09-06-2019
  •  | 
  •  

質問

親ディレクトリ内の最新の 4 つのディレクトリを除くすべてを削除したいと考えています。Bash でこれを行うにはどうすればよいでしょうか?

役に立ちましたか?

解決

ls -atrd */ | head --lines=-4 | xargs rm -rf

編集: ls に 'a' 引数を追加しました

他のヒント

「最新の 4 つのディレクトリを除くすべてのディレクトリを削除する」のか、「最新の 4 つのディレクトリを除くすべて (ファイルとディレクトリ) を削除する」のかを明確にしてください。

ディレクトリの作成時間は不明であることにも注意してください。ディレクトリが最後に変更されたのがいつであるか、つまりファイルが追加、削除、または名前変更されたのがいつであるかのみわかります。

次のようにすることができます。

#!/bin/bash

#store the listing of current directory in var
mydir=`ls -t`
it=1

for file in $mydir
    do
        if [ $it -gt 5 ]
        then
            echo file $it will be deleted: $file
            #rm -rf $file
        fi
        it=$((it+1))
    done

(実際に実行するには、rm の前の # を削除してください ;))

もう 1 つの、BSD セーフな、配列を使用した方法です (なぜそうしないのでしょうか?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top