2015-08-28 3 views
1

Список файлов в одном из моих каталогов, как на сегодняшний день:Как найти и удалить этот файл по сериям имени

2015-08-28 12:05 A01.tar 
2015-08-28 11:31 A02.tar 
2015-08-28 10:26 A03.tar 
2015-08-28 10:16 A04.tar 
2015-08-28 07:26 A05.tar 
2015-08-28 00:26 A06.tar 
2015-08-28 00:26 A07.tar 
2015-08-27 16:14 AA01.tar 
2015-08-27 14:58 CV03.tar 
2015-08-27 11:59 CV04.tar 
2015-08-27 11:32 CV05.tar 
2015-08-27 11:22 CV07.tar 
2015-08-27 11:12 CV08.tar 
2015-08-27 11:32 CV09.tar 

Теперь я хочу, чтобы сохранить только 5 новейших файлов каждой серии (серия = CV , А, АА). например, я хочу удалить

CV09.tar 
A06.tar 
A07.tar 

И остальное. Должен ли я использовать «wc -l»?

ответ

0

Использование команды «Найти». Подобно этому

find /var/log/httpd/ -name "*CV.tar" -mtime +5 -delete 
0
ls -t | sed -e '1,5d' | xargs -d '\n' rm 

Это должно обрабатывать все символы (кроме строки) в имени файла.

Что здесь происходит?

  • ls -t перечисляет все файлы в текущей директории в порядке убывания времени изменения. То есть, последние измененные файлы сначала, одно имя файла в строке.
  • sed -e '1,5d' удаляет первые 5 строк, то есть 10 самых новых файлов. Я использую это вместо tail, потому что я не могу вспомнить, нужен ли мне tail -n +5 или tail -n +11.
  • xargs -d '\n' rm собирает каждую строку ввода (без завершающей строки новой строки) и передает каждую строку в качестве аргумента rm.