На этот вопрос уже есть ответ здесь:
предположим, что у меня есть папки с именами af32, af42, af, и я хочу напечатать дату последней модификации всех папок, у которых есть шаблон af *, например . Я написал оболочку, которая будет принимать папку или файлы в качестве параметра и возвращать дату изменения для этой папки.
stat -c %y "$1"
этот код вернет дату последнего изменения в папку. но как я могу применить этот код к более чем одной папке, имя которой имеет одинаковый образец
Можно использовать 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
в результате, потому что иначе Вы не видели бы то, чему принадлежит файл каждая дата модификации.
Можно использовать оболочку 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/