Bash script для удаления всех файлов, кроме N, при сортировке по алфавиту

Трудно объяснить в заголовке.

У меня есть bash script, который выполняется ежедневно, чтобы создать резервную копию одной папки в zip файле. Zip файлы с именем мир YYYYMMDD .zip с YYYYMMDD являются датой резервного копирования. Я хочу удалить все, кроме 5 последних резервных копий. Сортировка файлов по алфавиту сначала будет отображать самые старые, поэтому мне в основном нужно удалить все, кроме последних 5 файлов, отсортированные в алфавитном порядке.

Ответ 1

Следующая строка должна сделать трюк.

ls -F world*.zip | head -n -5 | xargs rm
  • ls -F: список файлов в алфавитном порядке
  • head -n -5: Отфильтровать все строки, кроме последних 5
  • xargs rm: удалить каждый указанный файл.

Ответ 2

Как насчет этого:

find /your/directory -name 'world*.zip' -mtime +5 | xargs rm

Протестируйте его раньше. Это должно удалить все файлы world*.zip старше 5 дней. Итак, другая логика, чем у вас.

Ответ 3

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

rm `ls -A | head -5`

Ответ 4

ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
  • sort сортирует файлы
  • tail -n-5 возвращает все, кроме 5 последних
  • в цикле while выполняется удаление

Ответ 5

ls world*.zip | sort -r | tail n+5 | xargs rm

sort -r будет сортироваться в обратном порядке, поэтому самый новый будет в верхней части

tail n+5 будет выводить строки, начиная с 5-го

xargs rm удалит файлы. Xargs используется для передачи stdin в качестве параметров в rm.