Удалить все кроме 4 самых новых каталогов - PullRequest
4 голосов
/ 16 сентября 2008

Я хочу удалить все, кроме 4 самых новых каталогов в моем родительском каталоге. Как бы вы сделали это в Bash?

Ответы [ 4 ]

9 голосов
/ 16 сентября 2008
ls -atrd */ | head --lines=-4 | xargs rm -rf

Редактировать: добавлен аргумент 'a' в ls

1 голос
/ 16 сентября 2008

Вы можете сделать следующее:

#!/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 голос
/ 16 сентября 2008

Пожалуйста, уточните, имеете ли вы в виду «удалить все каталоги, кроме четырех новых» или «удалить все (файлы и каталоги), кроме четырех самых новых каталогов».

Обратите внимание, что время создания каталогов неизвестно. Можно только сказать, когда каталог был последний раз изменен, то есть были ли файлы добавлены, удалены или переименованы.

0 голосов
/ 16 сентября 2008

Другой, BSD-безопасный способ сделать это с массивами (почему бы и нет?)

#!/bin/bash
ARRAY=( `ls -td */` )
ELEMENTS=${#ARRAY[@]}
COUNTER=4
while [ $COUNTER -lt $ELEMENTS ]; do
  echo ${ARRAY[${COUNTER}]}
  let COUNTER=COUNTER+1
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...