Назад | Перейти на главную страницу

Почему поиск не исключает старые файлы?

Я хочу скопировать все сжатые файлы из моих журналов apache, которые были созданы менее 43 дней назад.

В качестве теста я просто перечислил свои файлы из find:

sudo find /var/log/apache2/ -mindepth 1 -ctime -43 -name "*.gz" -ls

Но в результаты включены файлы, созданные вплоть до августа (когда сервер был настроен), а также новые файлы:

8781890    4 -rw-r-----   1 root     adm           186 Aug 10 06:44 /var/log/apache2/error.log.13.gz
8781923    4 -rw-r-----   1 root     adm          1717 Aug 17 06:29 /var/log/apache2/error.log.12.gz

stat /var/log/apache2/error.log.13.gz
  File: `/var/log/apache2/error.log.13.gz'
  Size: 186             Blocks: 8          IO Block: 4096   regular file
  Device: 807h/2055d      Inode: 8781890     Links: 1
  Access: (0640/-rw-r-----)  Uid: (    0/    root)   Gid: (    4/     adm)
  Access: 2014-11-13 10:34:14.444059675 +1030
  Modify: 2014-08-10 06:44:11.000000000 +0930
  Change: 2014-11-09 06:29:48.035930468 +1030

Почему аргумент ctime не применяется?

Эти файлы были повернуты, и в процессе их ctime изменился. Каждый раз, когда ты touch файл или изменить его содержимое, вы собираетесь изменить его временные метки, которые перезапишут старые. Это введет в заблуждение вашу команду поиска.

ls листинг показывает mtime; поскольку это то, что ls показывает по умолчанию, если -c указан флаг (ctime)

Так по сути; ваш ctime критерии совпадения файлы и ls отображает mtime.

Поэтому попробуйте настроить свою команду поиска на что-то вроде

sudo find / var / log / apache2 / -mindepth 1 -mtime -43 -name "* .gz" -ls

И он должен работать так, как вы ожидали