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

Я хочу скопировать все сжатые файлы из моих журналов 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 не применяется?

1 ответ

Решение

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

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

Так по сути; ваш критерий ctime соответствует файлам, а ls отображает mtime.

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

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

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

Другие вопросы по тегам