Удалите все каталоги кроме нового

Я хотел бы записать сценарий, которые удаляют все каталоги (которые не пусты) из каталога, но сохраните новый. Это возможно, и как?

3
задан 3 August 2016 в 13:43

2 ответа

Я нашел ответ, и оставьте его здесь, это могло бы быть полезно для других пользователей:

cd /path/to
rm -r `ls -t | awk 'NR>1'`
0
ответ дан 1 December 2019 в 16:57

Вот способ сделать это использование find.

find -type d ! -wholename $(find -type d -printf '%T+ %p\n' | sort -r | head -1 | cut -d" " -f2) ! -wholename "." -exec rm -r {} +

Разбивка команды:

  • find -type d первая часть говорит, находят для поиска каталогов только
  • ! -wholename исключите хиты со следующим полным именем. Следующая часть (между $()) оценивается и используется в качестве имени файла здесь
    • $(find -type d -printf '%T+ %p\n' | распечатайте метки времени для каталогов
    • sort -r | отсортируйте их от самых старых до новейших
    • head -1 | проводите только первую строку (новейший каталог)
    • cut -d" " -f2) удалите метку времени из вывода
  • ! -wholename "." исключите хиты с полным именем .. Вы не можете удалить каталог, Ваш в настоящее время рабочий в.
  • -exec rm -r {} + удалите файлы соответствия.

Необходимо выполнить команду без последней части (-exec rm -r {} +) во-первых, для наблюдения, какие каталоги будут удалены.


Пример:

содержание каталога:

Aug  4 14:38 bar/
Aug  4 14:38 bla
Aug  4 14:38 foo/
Aug  4 14:41 foobar/

выполнение команды:

find -type d ! -wholename $(find -type d -printf '%T+ %p\n' | sort -r | head -1 | cut -d" " -f2) ! -wholename "." -exec rm -r {} +

получающееся содержание каталога:

Aug  4 14:38 bla
Aug  4 14:41 foobar/

отметьте это bla файл и не каталог. Таким образом, это не будет удалено.

2
ответ дан 1 December 2019 в 16:57

Другие вопросы по тегам:

Похожие вопросы: