質問
親ディレクトリ内の最新の 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
所属していません StackOverflow