Unix найти имена файлов, которые лексикографически меньше, чем данное имя файла - PullRequest
1 голос
/ 25 октября 2011

У меня есть список файлов в каталоге, которые автоматически генерируются системой с датой в имени файла.Вот некоторые примеры: audit_20111020, audit_20111021, audit_20111022 и т. Д.

Я хочу очистить файлы старше 18 месяцев, поэтому я хочу собрать команду unix find, которая найдет файлы меньше чемaudit_20100501 и удалите их.

Кто-нибудь знает, как использовать лексикографический порядок в качестве критерия в команде поиска?

Ответы [ 3 ]

2 голосов
/ 26 октября 2011

Другой вариант Perl:

perl -E'while(<audit_*>) { say if /(\d{8})/ && $1 < 20100501}'

Заменить say на unlink, если он печатает ожидаемые имена файлов.

Примечание: < выполняет числовое сравнение, используйте lt, если хотите сравнение строк.

1 голос
/ 26 октября 2011

С Perl это легко. Введите perl и:

for (glob "*")
{
  my($n) = /(\d+)/;
  unlink if ($n < 20100501);
}
^D

Тест перед использованием. Обратите внимание, что я предполагаю, что это фиксированный формат, и каталог содержит только эти файлы

0 голосов
/ 12 мая 2016

Можно отсортировать результат find с помощью команды sort:

find . -name "audit*" | sort -n

... тогда найдите способ разделить этот список.


Но для того, что вы хотите сделать, то есть удалить каталоги старше определенной даты (18 месяцев - ~ 547 дней), вы можете использовать вместо этого:

find -ctime -547 -type d | xargs -I{} rm -rf {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...