Удалить все, кроме 4 самых новых каталогов.

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

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу удалить все каталоги в родительском каталоге, кроме четырех новейших.Как бы вы сделали это в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top