в терминале linux, как я могу показать дату последнего изменения папки, принимая во внимание ее содержимое?


Так вот в чем дело. Допустим, у меня есть каталог с именем "web", так что

$ ls -la

drwx------  4 rimmer rimmer 4096 2010-11-18 06:02 web

но внутри этого Каталога, web / php/

$ ls -la

-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php

это означает, что даже если содержимое моего Каталога, /web/php/index.php был последний раз изменен в 2011-01-05, сам каталог / web / сообщается как последний измененный в 2010-11-18.

что мне нужно сделать, так это сообщить дату последней модификации моего/ web / каталога в качестве последней даты модификации любого файл / каталог внутри этого каталога, рекурсивно.

Как мне это сделать?

3 55

3 ответа:

что-то типа:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
     sort -n -r | 
     head -n 1

объяснение:

  • команда find будет печатать время модификации для каждого файла, рекурсивно игнорируя каталоги (согласно комментарию IQAndreas вы не можете полагаться на временные метки папок)
  • сортировка-n (численно) - r (реверс)
  • head-n 1: получить первую запись

если у вас версия find (например, GNU find), который поддерживает -printf тогда нет необходимости называть stat неоднократно:

find /some/dir -printf "%T+\n" | sort -nr | head -n 1

или

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1

Если вам не нужна рекурсия, однако:

stat --printf="%y\n" *

если бы я мог, я бы проголосовал за ответ Пауло. Я проверил его и понял концепцию. Я могу подтвердить, что это работает. Элемент find команда может вывести много параметров. Например, добавьте в --printf статья:

%a for attributes in the octal format
%n for the file name including a complete path

пример:

find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file

позвольте мне поднять этот вопрос: Хочет ли автор этого вопроса решить свою проблему с помощью Bash или PHP? Это следует уточнить.