Хорошо, в вашем скрипте есть несколько ошибок.
Первая и самая проблемная строка:
ls -t /var/path/to/folder |head -n 3;
ls -t
вернет список файлов впорядок их последнего изменения, начиная с последнего изменения .head -n 3
говорит, что нужно перечислить только первые три строки.Так что это говорит о том, что «дайте мне список только трех самых последних измененных файлов», что я не думаю, что вы хотите.
Я не совсем уверен, что вы делаете со второй командой ls
, но я почти уверен, что это просто объединит все файлы в каталоге в ваш список.Это означает, что когда он получит sort
ed и uniq
'ed, у вас останется алфавитный список всех файлов в этом каталоге.Когда передается что-то вроде xargs rm
, вы уничтожаете все в этом каталоге.
Далее, sort | uniq
не нужна часть uniq
.Вы можете просто использовать переключатель -u
на sort
, чтобы избавиться от дубликатов.В любом случае эта часть вам не нужна.
Наконец, фактическое удаление каталога.С этой стороны, вы правильно поняли свой вопрос: просто используйте rm -r
Вот самый простой способ, которым я могу подумать сделать это:
ls -t1 /var/path/to/folder | tail -n +4 | xargs rm -r
Вот что здесь происходит:
ls -t1
печатает список, один файл / каталог на строку, всех файлов в /var/path/to/folder
, упорядочивая по самой последней дате изменения. tail -n +4
печатает все строки в выводе ls -t1
, начиная с четвертой строки (т. Е. Три последних измененных файла не будут перечислены) xargs rm -r
говорит об удалении любого файла, выводимого изtail
.-r
означает рекурсивное удаление файлов, поэтому, если он обнаружит каталог, он удалит все в этом каталоге, а затем удалит сам каталог.
Обратите внимание, что я ничего не сортирую и не удаляюлюбые дубликаты.Это потому что:
ls
сообщает о файле только один раз, поэтому нет дубликатов для удаления - Вы удаляете все переданные файлы, так что это не имеет значения вв каком порядке они удалены.
Имеет ли все это смысл?
Редактировать:
Так как я ошибся в ls
, указав полный путь, когдапередал абсолютный каталог, и, поскольку вы не сможете выполнить cd
, возможно, вы могли бы использовать tail
.
Например:
ls -t1 /var/path/to/folder | tail -n +4 | xargs find /var/path/to/folder -name $1 | xargs rm -r