Просмотрите все папки, имена которых содержат заданный шаблон [дубликат]

На этот вопрос уже есть ответ здесь:

предположим, что у меня есть папки с именами af32, af42, af, и я хочу напечатать дату последней модификации всех папок, у которых есть шаблон af *, например . Я написал оболочку, которая будет принимать папку или файлы в качестве параметра и возвращать дату изменения для этой папки.

stat -c %y "$1"

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

0
задан 6 June 2018 в 06:51

2 ответа

Можно использовать find искать рекурсивно в search_folder/ для каталогов (-type d) соответствие определенному шарику шаблона (например. -name 'af*'):

find search_folder/ -type d -name 'af*' -exec stat -c '%y %n' '{}' \;

Это затем выполнится (-exec ... \;) команда stat -c '%y %n' '{}' на каждом из результатов поиска, заменяя {} с результатом соединяют каналом, начиная с данного search_folder/.

Обратите внимание, что я изменил Ваш stat вывод для включения имени файла / путь %n в результате, потому что иначе Вы не видели бы то, чему принадлежит файл каждая дата модификации.

1
ответ дан 29 October 2019 в 04:24

Можно использовать оболочку globbing следующим образом:

stat -c %y af*/

af*/ соответствует каждому каталогу в текущем каталоге, начинающемся с “AF”.
Если это бросает ошибку как

bash: /usr/bin/stat: Argument list too long

используйте это printf подход вместо этого:

printf '%s\0' af*/ | xargs -0 stat -c %y

Пример выполняется

Вы могли бы хотеть добавить %n кому: statвывод …

$ ls
af  af32  af42  bf  cg45
$ stat -c %y af*/
2018-06-05 18:59:55.355277977 +0200
2018-06-04 19:01:28.968869600 +0200
2018-06-06 18:58:15.968639269 +0200
$ stat -c '%y %n' af*/
2018-06-05 18:59:55.355277977 +0200 af/
2018-06-04 19:01:28.968869600 +0200 af32/
2018-06-06 18:58:15.968639269 +0200 af42/
1
ответ дан 29 October 2019 в 04:24

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

Похожие вопросы: