Я хотел бы записать сценарий, которые удаляют все каталоги (которые не пусты) из каталога, но сохраните новый. Это возможно, и как?
Я нашел ответ, и оставьте его здесь, это могло бы быть полезно для других пользователей:
cd /path/to
rm -r `ls -t | awk 'NR>1'`
Вот способ сделать это использование 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
файл и не каталог. Таким образом, это не будет удалено.