4

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

4

4 に答える 4

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

編集: lsに「a」引数を追加

于 2008-09-16T12:55:29.923 に答える
1

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

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

于 2008-09-16T12:56:27.050 に答える
1

次のことができます。

#!/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 の前の # を削除してください ;) )

于 2008-09-16T13:05:21.180 に答える
0

配列を使用した、BSD セーフな別の方法 (なぜでしょうか?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
于 2008-09-16T13:24:35.283 に答える