Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

Как работают фигурные скобки в Shell Linux?

#linux #shell #find


есть,скажем, команда find /Users/mac/Downloads/topdf  -exec sh -c "ls -l {}" \;
вот что выводит:


  


я не понимаю как тут работают фигурные скобки. 
 То есть понятно, что по результату с помощью {} программа выводит листинг про каждый
файл, а потом то же самое, но плюс еще и путь к файлу
но что она ставит вместо фигурных скобок ?

что-то типа

find /Users/mac/Downloads/topdf  -exec sh -c "ls -l /Users/mac/Downloads/topdf/file1.pdf" \;


потом 

find /Users/mac/Downloads/topdf  -exec sh -c "ls -l /Users/mac/Downloads/topdf/file2.pdf" \;


или я не так понимаю ? 
Буду благодарен за объяснение 
    


Ответы

Ответ 1



В данном случае фигурные скобки не имеют отношения к языку оболочки, они интерпретируются исключительно утилитой find. Ключ -exec для каждого найденного файла запускает процесс указанный в его параметрах, при этом заменяя строку {} на имя аргумента; в данном случае он по очереди запустит: sh -c "ls -l /Users/mac/Downloads/topdf/." sh -c "ls -l /Users/mac/Downloads/topdf/file1.pdf" sh -c "ls -l /Users/mac/Downloads/topdf/file2.pdf" # ... итд Замечания: Порядок обхода файлов не определён Некоторые реализации find допускают замену строки '{}' только в случае если она является отдельным аргументом. Для них пришлось бы писать нечто подобное: find -exec sh -c 'ls -l "$0"' '{}' \; К GNU и FreeBSD find это не относится. Обычно не прибегают к дополнительному вызову sh и сразу взывают необходимую утилиту, например ls: find -exec ls -l '{}' \; Окромя лучшей производительности у этого способа есть и другое важное преимущество — он корректно обрабатывает файлы с пробелами и/или переводами строк в именах. см. man find

Комментариев нет:

Отправить комментарий