我在 shell 中运行以下命令来批量转换.HEIC
文件到.JPG
文件,命令成功,但是有一部分我不明白:
find . -name '*.HEIC' -exec sh -c 'magick convert $1 "${1%.HEIC}.JPG"' _ {} \;
显然_ {}
分配行为find
结果到$1
,但是如何呢?我在谷歌和这里都找不到解释,并且没有任何运气man find
。答案完全有可能就在这里,但这些符号不太好搜索。
所以问题是,如何_ {}
将变量分配给$1
?是否可以使用 find/ 或其他命令为其分配多个变量?
其中涉及两件事:_ {}
将文件名分配给$1
。首先,是如何find
's -exec
有效:它运行以下参数(直到转义;
) 作为命令,但带有{}
替换为它找到的文件的路径。因此,如果发现./somefile.HEIC
,它将运行与以下命令等效的命令:
sh -c 'magick convert $1 "${1%.HEIC}.JPG"' _ ./somefile.HEIC
第二部分是sh
命令。sh
可以做很多事情,但是如果给它一个-c
选项,它采用紧随其后的参数(magick convert $1 "${1%.HEIC}.JPG"
)作为要解析和运行的命令字符串,有点像一个小脚本。之后的参数被视为该迷你脚本的参数,从$0
。在这种情况下,这意味着它运行迷你脚本$0
set to _
, and $1
设置为“./somefile.HEIC”。如果提供更多参数,它们将是$2
, $3
, etc.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)