我在 shell 中运行了以下命令将 .HEIC
文件批量转换为 .JPG
文件,命令成功,但是有一部分我不知道理解:
find . -name '*.HEIC' -exec sh -c 'magick convert $1 "${1%.HEIC}.JPG"' _ {} \;
显然 _ {}
用于将 find
结果分配给 $1
,但是怎么做呢?我在 google 和这里都找不到解释,而且 man find
也没有任何运气。答案很可能就在这里,但这些符号不太好搜索。
那么问题来了,_{}
如何给$1
赋值?是否可以使用 find/或其他命令为其分配多个变量?
最佳答案
_ {}
将文件名分配给 $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
等。
关于bash - 有人可以解释这个 bash : “_ {}\;” 末尾符号的内部工作原理吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53236018/