Может кто-нибудь объяснить внутреннюю работу символов в конце этого bash: «_ {} \;» - PullRequest
0 голосов
/ 10 ноября 2018

Я выполнил следующую команду в оболочке для пакетного преобразования .HEIC файлов в .JPG файлы, команда выполнена успешно, но есть часть, которую я не понимаю:

find . -name '*.HEIC' -exec sh -c 'magick convert $1 "${1%.HEIC}.JPG"' _ {} \;

Очевидно, _ {} действует, чтобы присвоить find результат $1, но как? Я не могу найти объяснение ни в Google, ни здесь, и мне не повезло с man find. Вполне возможно, что ответы были здесь, но эти символы не очень приятно искать.

Итак, вопрос в том, как _ {} присваивает переменную $1? Можно ли присвоить ему несколько переменных с помощью команды find / или других команд?

1 Ответ

0 голосов
/ 10 ноября 2018

В том, как _ {} назначает имя файла для $1, есть две вещи. Во-первых, find работает -exec: он запускает следующие аргументы (вплоть до экранированного ;) как команду, но с {} заменяется путем к пути к найденному файлу. Таким образом, если он найдет ./somefile.HEIC, он запустит эквивалент команды:

sh -c 'magick convert $1 "${1%.HEIC}.JPG"' _ ./somefile.HEIC

Вторая часть - это команда sh. sh может сделать несколько вещей, но если ему дана опция -c, он принимает сразу следующий аргумент (magick convert $1 "${1%.HEIC}.JPG") в качестве командной строки для анализа и запуска, что-то вроде маленького мини-скрипта. Аргументы после этого принимаются в качестве аргументов для этого мини-скрипта, начиная с $0. В этом случае это означает, что он запускает мини-скрипт с $0, установленным на _, и $1, установленным на "./somefile.HEIC". Если было предоставлено больше аргументов, они были бы $2, $3 и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...