Ответ 1
Следующая строка должна сделать трюк.
ls -F world*.zip | head -n -5 | xargs rm
-
ls -F
: список файлов в алфавитном порядке -
head -n -5
: Отфильтровать все строки, кроме последних 5 -
xargs rm
: удалить каждый указанный файл.
Трудно объяснить в заголовке.
У меня есть bash script, который выполняется ежедневно, чтобы создать резервную копию одной папки в zip файле. Zip файлы с именем мир YYYYMMDD
.zip с YYYYMMDD
являются датой резервного копирования. Я хочу удалить все, кроме 5 последних резервных копий. Сортировка файлов по алфавиту сначала будет отображать самые старые, поэтому мне в основном нужно удалить все, кроме последних 5 файлов, отсортированные в алфавитном порядке.
Следующая строка должна сделать трюк.
ls -F world*.zip | head -n -5 | xargs rm
ls -F
: список файлов в алфавитном порядкеhead -n -5
: Отфильтровать все строки, кроме последних 5xargs rm
: удалить каждый указанный файл.Как насчет этого:
find /your/directory -name 'world*.zip' -mtime +5 | xargs rm
Протестируйте его раньше. Это должно удалить все файлы world*.zip
старше 5 дней. Итак, другая логика, чем у вас.
Я не могу проверить его прямо сейчас, потому что у меня нет машины Linux, но я думаю, что это должно быть:
rm `ls -A | head -5`
ls | grep ".*[\.]zip" | sort | tail -n-5 | while read file; do rm $file; done
sort
сортирует файлыtail -n-5
возвращает все, кроме 5 последнихwhile
выполняется удаление ls world*.zip | sort -r | tail n+5 | xargs rm
sort -r
будет сортироваться в обратном порядке, поэтому самый новый будет в верхней части
tail n+5
будет выводить строки, начиная с 5-го
xargs rm
удалит файлы. Xargs используется для передачи stdin в качестве параметров в rm.