我一直在使用“ 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"