Удалить все, кроме 4 самых новых каталогов.
Вопрос
Я хочу удалить все каталоги в родительском каталоге, кроме четырех новейших.Как бы вы сделали это в Bash?
Решение
ls -atrd */ | head --lines=-4 | xargs rm -rf
Редактировать: добавлен аргумент «a» в ls
Другие советы
Уточните, пожалуйста, имеете ли вы в виду «удалить все каталоги, кроме четырех самых новых» или «удалить все (файлы и каталоги), кроме четырех самых новых каталогов».
Также обратите внимание, что время создания каталогов неизвестно.Можно только сказать, когда каталог последний раз изменялся, то есть добавлялись, удалялись или переименовывались файлы.
вы можете сделать следующее:
#!/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, чтобы это действительно произошло ;))
Другой, BSD-безопасный способ сделать это с помощью массивов (почему бы и нет?)
#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
echo ${ARRAY[${COUNTER}]}
let COUNTER=COUNTER+1
done
Не связан с StackOverflow