Как отобразить измененное время с помощью команды "найти"?

С find Команда, я могу отображать имена каталогов с несколькими уровнями. Следующая команда отображает все каталоги под /var путь с глубиной 2:

find /var -maxdepth 2 -type d;

Результат показывает:

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

С stat Команда, я могу найти измененную дату и время:

stat /var/log/samba | grep 'Modify:'

Результат:

Modify: 2014-01-02 11:21:27.762346214 -0800 

Есть ли способ объединить две команды, чтобы каталоги были перечислены с измененным временем даты?

6 ответов

Решение

Вы могли бы использовать -exec переключиться на find и определить выходной формат stat с использованием -c переключиться следующим образом:

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

Это должно дать имя файла с последующим временем его модификации в той же строке вывода.

Принятый ответ работает, но он медленный. Нет необходимости выполнять статистику для каждого каталога, команда find предоставляет дату изменения, и вы можете просто распечатать ее напрямую. Вот эквивалентная команда, которая значительно быстрее:

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"

Последние версии GNU find также включают -printf опция, которая включает поля даты. Если вам нужно напечатать имя файла и время модификации в стандартном формате "C", вы можете использовать -printf "%c %p\n",

Если вы хотите, чтобы дата в определенном формате, вы можете использовать %C сопровождаемый полевым символом. Например, 4-значный год будет %CY, с Y будучи персонажем для 4-значного года.
Обратите внимание, что если вам нужно несколько полей, вам нужно указать %C многократно. Например, формат YYYY-MM-DD будет выглядеть %CY-%Cm-%Cd,

Проверьте справочные страницы или онлайн-документацию для получения дополнительной информации.

Вот рабочий пример:

find . -name favicon.ico -printf "%c %p\n"

find /var -maxdepth 2 -type d | xargs ls -oAHd

Это способ получить ваши основные ls Команда для отображения полного пути к каталогу. В то время как ls имеет -R параметр для рекурсивного поиска, пути не будут отображаться в результатах с -l или же -o опция (по крайней мере в OSX), например, с: ls -lR,

Еще один, который я использую для печати измененных файлов в последний день. ls -ltr дает мне более подробную информацию о времени модификации, о пользователе и т. д.

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 

Попробуйте эту строку:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

здесь я запустил его, он выводит:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....
Другие вопросы по тегам