有人可以解释一下这个 bash 结束时符号的内部工作原理吗:“_ {} \;”

2023-11-29

我在 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(使用前将#替换为@)

有人可以解释一下这个 bash 结束时符号的内部工作原理吗:“_ {} \;” 的相关文章

  • 为什么我的 sed 命令在使用变量时失败?

    使用 bash 我尝试插入日期变量并搜索该日期的日志文件 然后将输出发送到文件 如果我像这样对日期进行硬编码 它会起作用 sed n Nov 22 2010 p file gt log file 但如果我这样做就会失败 date Nov 2
  • 如何让 Ruby 的 Find.find 遵循符号链接?

    我有一个文件层次结构 一些子目录是相对符号链接 我在用Ruby s Find find http apidock com ruby Find爬行这些目录并找到一些特定的文件 但是 它不会查找任何符号链接的目录 它遵循符号链接的文件 看着源代
  • 空格分隔值;如何提供包含空格的值

    我正在创建一个 bash 脚本来通过以下方式配置多个 Azure 资源Azure CLI https learn microsoft com en us cli azure view azure cli latest 到目前为止一切顺利 但
  • 如何将一个目录中的所有文件移动到多个具有给定文件数量的目录中?

    我有一个包含超过 27000 张图像的目录 我想将这些文件分成文件夹 每个文件夹包含大约 500 张图像 它们如何排序并不重要 我只是想将它们分开 一个 简单 的 find xargs 就可以了 find maxdepth 1 type f
  • 使用 Bash 比较 PHP 版本号?

    我有这个脚本 应该确保用户当前的 PHP 版本在某个范围内 尽管它应该可以工作 但某个地方有一个错误 使它认为版本超出范围 有人可以看一下并告诉我我能做什么来解决它 function version echo gawk F printf d
  • Zsh 颜色部分制表符补全

    是否可以在Zsh中对部分完成结果的已完成部分进行着色 Fish 默认执行此操作 至少在 Gentoo 中 如下图所示 全尺寸图像 https i stack imgur com KaL1g png https i stack imgur c
  • 在 shell 中将 ANSI 转换为 UTF-8

    我正在制作一个解析器 1 csv 到 3 csv 脚本 但遇到问题 我是法国人 所以用我的语言我有这样的字母 一位客户向我发送了一个 csv 文件 Linux 将其识别为 unknown 8bit 我猜是 ansi 在我的脚本中 我正在编写
  • 删除损坏的链接 Unix

    我想删除损坏的链接 但在此之前我想确认目录中是否存在链接文件 我们来调用一下链接A if a A then print ya A is ther fi But if A链接已损坏 那么我该如何检查 find L type l找到损坏的符号链
  • Linux命令:如何仅“查找”文本文件?

    经过几次谷歌搜索后 我得出的结论是 find my folder type f exec grep l needle text exec file grep text 这非常不方便 并且会输出不需要的文本 例如 mime 类型信息 还有更好
  • 未找到神奇函数“bash”

    我有一堆模拟想要在高性能集群上运行 我应该在这些集群上进行预留以获得计算时间 由于预订是有时间限制的 我正在开发一个自动化脚本 我可以scp进入集群并运行 然后 该脚本将下载相关的模拟文件 运行它们 并上传结果 该自动化脚本的一部分位于ba
  • 如何检查程序是否在 Windows 上的 Ubuntu 上的 Bash 中运行,而不仅仅是普通的 Ubuntu?

    非常简单 确定您所使用的操作系统的通常位置似乎与 Ubuntu for Windows 上的普通 Ubuntu 相同 例如uname a与本机 GNU Linux 安装相同并且 etc os version与 Ubuntu Trusty T
  • 为什么 PS1 不更新 git 分支名称?

    PS1 w git branch grep cut b 3 100 我按上面设置我的 PS1 但在我更改分支后 它不会更新提示中的分支名称git checkout 或使用以下命令更改存储库cd 如何解决这个问题 当反引号引用位被评估时PS1
  • 通过 bash 调用应用程序时忽略 dyld_insert_libraries

    对于我的应用程序 我使用 DYLD INSERT LIBRARIES 来切换库 我运行的是 Mac OS X El Capitan 如果我在 shell 中设置这些环境变量 export PYTHONHOME HOME anaconda e
  • 使用文本框搜索 datagridview 中的列 (vb.net)

    如何使用文本框搜索 datagridview 中的列 我正在使用 vb net 2010 我有一个带有数据源的 Datagridview 下面是我用于填充 datagridview 的代码 网格视图将有 4 列 Private Sub Lo
  • 如何在 python 解释器 shell 中重复最后一个命令?

    如何重复上一条命令 常用键 向上 Ctrl 向上 Alt p 不起作用 他们创造出无意义的人物 ve kakarukeys localhost ve python Python 2 6 6 r266 84292 Nov 15 2010 21
  • Bash 中的条件管道

    我有一个过滤器 我想选择性地启用它 我想知道如何在 bash 中以干净的方式执行此操作 FILTER sort also can be empty ls FILTER cat 此代码不起作用 因为它会调用ls with and sort作为
  • 无法在 Zsh 中找到 Bash 的替代命令

    我将最新的 git completion bash 放入我的 zshrc 中 然后我得到 Users Masi bin shells git git completion bash 2116 command not found comple
  • Yocto for Nvidia Jetson 由于 GCC 7 而失败 - 无法计算目标文件的后缀

    我正在尝试将 Yocto 与 meta tegra 一起使用 https github com madisongh meta tegra https github com madisongh meta tegra 为 Nvidia Jets
  • Ansible 权限问题

    我正在尝试将当前用户添加到系统中的某个组 然后执行需要该组权限的命令 我的剧本是这样的 name Add this user to RVM group sudo true user state present name vagrant ap
  • 如何在文件中固定数量的字符后插入换行符

    我正在寻找一个 bash 或 sed 脚本 最好是单行脚本 用它可以在巨大的文本文件中的固定数量的字符之后插入一个新行字符 像这样的事情怎么样 Change 20 是换行符之前的字符数 temp text 是要替换的文件 sed e s 2

随机推荐