Как отобразить измененное время с помощью команды "найти"?
С 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
....