bash - 在这段代码中,为什么我们必须在 find ... -exec 之后插入 bash ?; {} 和 ${} 引用有什么区别?
问题描述
我一直在使用代码 1 和 2 中的“find -exec”命令:
代码 1
find . -type d -exec chmod 775 {} +
代码 2
find . -type f -exec mv {} ./.. \;
但有时我看到人们在“-exec”之后使用“bash”或“sh”,如代码 3 和 4:
代码 3
alias foo="find . -maxdepth 1 -mindepth 1 -type d -exec sh -c 'echo \"\$(find \"{}\" -type f | wc -l)\" {}' \; | sort -nr
代码 4
alias foo="find . -maxdepth 1 -mindepth 1 -type d -exec bash -c 'echo \"\$(find \"\${1}\" -type f | wc -l) \"\${1}\" \"' -- \"{}\" \; | sort -nr"
问题 1abc:我们什么时候在 -exec 之后使用 bash 或 sh ?与 chmod 和 mv 相比,echo 有什么特别之处吗?echo 是否属于 bash,如果是,我怎么知道前面还有哪些其他命令需要 bash?
代码 4 是对代码 3 的改进建议,因为他们说“您应该将文件名作为参数传递给内部 find 命令。否则,如果您的某个文件夹的名称中包含“:”,您将遇到问题,这我能够了解。
问题 2abc:我不明白 ${1} 如何使它比 {} 更安全?他们引用的不是同一个东西吗?我尝试用 \"\${1}\" 替换最后一个 \"{}\" 部分,如下所示,但它奇怪地失败了。我不明白为什么。
代码 5
alias foo="find . -maxdepth 1 -mindepth 1 -type d -exec bash -c 'echo \"\$(find \"\${1}\" -type f | wc -l) \"\${1}\" \"' -- \"\${1}\" \; | sort -nr"
解决方案
推荐阅读
- shopify - 当用户在 shopify 的应用中心单击应用程序名称时,我可以在哪里设置用户将重定向的 URL?
- python - 如何从文件中逐行读取
- flutter - Flutter - 如何使用 Bloc 重建 Widget?
- javascript - 在映射的 div 上使用选择器
- google-cloud-platform - 如何在不触发谷歌日历中的同意屏幕的情况下指定发现文档?
- sql-server - 作业应用到目标服务器失败
- windows - 如何将最新的服务堆栈更新 (SSU) 表放入 power bi?
- javascript - Javascript表单验证在表单验证中不起作用
- apache - 如何将 apache/nginx 配置为代理和重写?
- javascript - 表单组件名称在反应 js 中的 antd 中更新