2

Я пытаюсь удалить некоторые архивные файлы из папки на файловом сервере CentOS с помощью cronjob. Требования:

  1. Удалить файлы за последний месяц
  2. Файл .tgz первого дня месяца должен быть оставлен без изменений.

Я знаю, что могу удалить файлы старше x дней с помощью:

find /path -mtime +30 -exec rm {} \;

Однако, это не оставит в покое архив, созданный в первый день месяца. Интернет, кажется, не дает ответа (пока).

1 ответ1

3

Первая записка

В файловых системах unix у вас нет информации о времени создания файла. То, что часто называют ctime, - это время изменения статуса файла. Это может быть изменено путем переименования файла или изменения прав доступа.

Смотрите эту ссылку для получения дополнительной информации.

Так что имейте в виду, что следующее решение может быть неудачным.

Решение с помощью awk

find нет оператора для выбора специальной даты. Таким образом, хитрость заключается в том, чтобы создать вывод с указанием дня месяца и имени файла с использованием разделителя, который не является частью имен файлов. Я предполагаю, что # такой возможный разделитель символов.

 find . -mtime +30 -printf "%Cd#%p\n"

На втором этапе вы можете отфильтровать ненужные файлы.

 find . -mtime +30 -printf '%Cd#%p\n' |awk -F'#' '$1 !~ /^01/{print $2;}'

Решение с помощью grep и cut

Делаем тот же трюк, что и выше.

 find . -mtime +30 -printf '%Cd#%p\n' |grep -v '^01' |cut -d '#' -f 2

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .