在这段代码中,为什么我们必须在find ... -exec之后插入bash? ; {}和$ {}引用之间有什么区别?

时间:2019-05-03 02:46:57

标签: bash reference command-line-interface exec dollar-sign

我一直在使用“ find -exec”命令,如代码1和2所示:

代码1

find . -type d -exec chmod 775 {} +

代码2

find . -type f -exec mv {} ./.. \;

但是有时候我看到人们像代码3和4一样在“ -exec”之后使用“ bash”或“ sh”:

代码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是否属于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"

0 个答案:

没有答案