1

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

Я прочитал "вопросы разрешены здесь", но если есть лучший сайт StackExchange для этого вопроса, пожалуйста, дайте мне знать. Это не система Ubuntu, так что askubuntu.com отсутствует.

система:

  • Redhat Enterprise Linux 5.5.56. Нет, мы не можем обновить, пожалуйста, не спрашивайте об этом.
  • Я стараюсь придерживаться Баш.
  • найти версию 4.2.27

Проблема: я хочу создать bash-скрипт, в котором, начиная с текущего каталога, в котором выполняется скрипт, я хочу перечислить каталоги и подкаталоги, которые не были изменены в течение как минимум 300 дней. Эти каталоги, которые я проверяю, содержат файлы, которые МОГУТ иметь время модификации позже, чем время модификации каталога. Я хочу перечислить только имена каталогов, которые содержат «JOB», но не «DIV», с учетом регистра.

Примечание. Наши каталоги расположены следующим образом: каталоги CLS_xxx будут содержать много каталогов GRP_xxx. GRP_xxx dirs будет содержать много JOB_xxx dirs. JOB_dirs может содержать много DIV_xxx директорий. Поэтому, хотя я могу быть в каталоге, содержащем все каталоги CLS, я хочу показать только каталоги, содержащие JOB.

/path/to/containerdir/
  CLS_xxx/
    GRP_xxx/
      JOB_xxx/
        Files under here might be modified later than the JOB_xxx dir.
        DIV_xxx/
          files under DIV/ might be modified later than the JOB_xxx dir.

Ясно как грязь? :)

Вопросы:

  • Если файл изменяется внутри каталога с именем JOB_1234, как это влияет на время изменения каталога?
  • Влияет ли изменение файла на время доступа к каталогу? Должен ли я использовать время доступа к каталогу с помощью find?
  • Есть ли даже переключатель времени доступа к каталогу, потому что я не увидел его на странице руководства моей системы.
  • В какой момент время модов каталога изменилось? Когда мы изменим разрешения на это? Сменить владельцев или группу? Что-нибудь еще?
  • Когда меняется время доступа к каталогу? Когда файл внутри директории доступен или изменен?

Я читал справочную страницу для поиска, но не нашел свой ответ. Я также прочитал около 8 страниц из моего поиска Google о find и не нашел там своего ответа.

Эта команда прекрасно работает для поиска модов каталога> 300 дней.

find . -type d -print -mtime +300 | grep -v 'DIV' | grep -P 'JOB' | sort > $outfile

Но мой вопрос больше в том, что если файлы внутри директории были изменены совсем недавно? Учитывая каталог, который начинается с JOB_, как я могу найти самое последнее время изменения файла или каталога для каждого каталога JOB_ и файлов в этом каталоге JOB_?

Спасибо.

1 ответ1

2

Многие вопросы, поэтому я собираюсь ответить на часть "как это работает", а не на "как мне заставить это работать".

Это зависит от используемой файловой системы. Я отвечаю на основе ext [234], другие, вероятно, работают так же или аналогично.

  1. Нет, время изменения каталога не изменяется при изменении файла. Каталог в этом случае не изменяется, он по-прежнему содержит те же файлы, каталоги и т.д., Связанные с ним.

  2. То же, что и предыдущий, если "изменение файла" означает то же самое, что и «изменение какого-либо файла».

    Если вы удалите файл и добавите новый файл с тем же именем или переместите другой файл "поверх" другого, каталог будет изменен.

  3. Когда каталог изменен. Это означает связывание / отсоединение inode-объектов, таких как файлы или подкаталоги.

    Изменения разрешений изменяют время изменения , но не время изменения. Это разные.

    Если вы переместите каталог в другое место, время изменения изменится, но время изменения не изменится.

  4. Время доступа к каталогу изменяется при обращении к каталогу, если он не был выключен. Том может быть смонтирован с noatime, что означает, что обычно не пишется время последнего доступа. Обратите внимание, что данные каталога также кэшируются.

    Также, если вы просто обращаетесь к подкаталогу, время доступа к родительским (и) не изменится.

Таким образом, если вы ищете каталоги, которые не изменились за последние 300 дней, они все равно могут содержать файлы, которые были изменены. Создание или удаление файла не произошло, но редактирование содержимого может произойти. Вы должны будете проверить по файлам, как вы сказали.

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