以下是预期的工作方式:
$ find . -name .git -exec dirname '{}' \;
./google/guava
./JetBrains/intellij-community
./zsh-users/zsh-syntax-highlighting
但是以下内容仅返回点:
$ find . -name .git -exec echo "$(dirname '{}')" \;
.
.
.
为什么会这样,如何$(dirname '{}')
在find -exec
命令中使用?
请注意,我询问的是UNIX find
(特别是OS X和FreeBSD),而不是GNU。
您的外壳正在评估$(dirname)
之前的查找,从而导致执行以下命令:
find . -name .git -exec echo . ;
当然,您可以在find内部使用shell扩展,方法是自己调用另一个shell(或者更好的方法是,使用需要的shell作为shebang调用脚本)。
换一种说法:
find . -name .git -exec sh -c 'dirname {}' \;
不使用解决方案dirname
(POSIX,速度更快,需要减少一个子流程):
find . -name .git -exec sh -c 'path={}; echo "${path%/*}" ' \;
将/ u / tripleee的答案(支持他而不是我)与find优化结合在一起:
find . -name .git -exec sh -c 'for f; do echo "${f%/*}"; done' _ {} \+
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句