bash - 有人可以解释这个 bash : “_ {}\;” 末尾符号的内部工作原理吗

标签 bash shell find exec

我在 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/

相关文章:

bash - 如何在一个命令行中使用多个双破折号 (--)

java - 使用 sed 获取任何单词和最后一个单词

linux - 在 bash 脚本中打印子字符串

linux - 如果为真,则在新 screen 中运行脚本

shell - 使用 xargs 将目录从查找结果移动到另一个目录

javascript - JQuery - 查找具有给定数量兄弟元素的元素

linux - bash 如何终止父进程,或从 bash 模块脚本中的函数退出父进程

linux - Bash 数量限制?

linux - 根据匹配模式将一行行 grep 到 shell 变量中

linux - 如何显示 bash 中最近添加的 n 个目录的大小