Скрипт Bash для удаления всех файлов, кроме N, при сортировке по алфавиту - PullRequest
11 голосов
/ 27 января 2011

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

У меня есть скрипт bash, который запускается ежедневно для резервного копирования одной папки в zip-файл.Файлы zip имеют имя world YYYYMMDD .zip , где YYYYMMDD - дата резервного копирования.Что я хочу сделать, это удалить все, кроме 5 самых последних резервных копий.При сортировке файлов в алфавитном порядке сначала будут перечислены самые старые из них, поэтому при сортировке в алфавитном порядке в основном необходимо удалить все файлы, кроме последних 5.

Ответы [ 5 ]

19 голосов
/ 27 января 2011

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

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

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

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

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

1 голос
/ 27 января 2011

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

rm `ls -A | head -5`
0 голосов
/ 27 января 2011

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

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

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

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

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