当我使用xargs将文件名传递给grep时,grep: : No such file or directory
来自哪里?
⋊> ~/.v/bundle find . -name config | grep ".git" | xargs grep "url" {} 11:07:46
grep: : No such file or directory
./Dockerfile.vim/.git/config: url = https://github.com/ekalinin/Dockerfile.vim.git
./nerdcommenter/.git/config: url = https://github.com/scrooloose/nerdcommenter.git
虽然我没有空行或类似的东西
⋊> ~/.v/bundle find . -name config | grep ".git" 11:08:30
./Dockerfile.vim/.git/config
./nerdcommenter/.git/config
如何避免它?
我知道我可以跳过awk 'NR>1'
之类的第一行,但想了解问题的原因。
谢谢。
P.S。我在Mac上。
答案 0 :(得分:2)
很难说出您网站上出现了什么问题。我已经尝试重现错误,但也有.vim/bundle
,但我无法重现错误。
无论如何,我建议将命令简化为:
find . -wholename '*/.git/config' -exec grep -H url {} +
由于xargs
支持find
语法,因此不再需要 +
。对于find
的GNU,BSD(MacOS)和busybox版本,这至少是正确的。
答案 1 :(得分:1)
无需添加{}
(与find -exec
不同)
~/.v/bundle find . -name config | grep ".git" | xargs grep "url"
应该有用。
甚至更好(只是在包含空格或不寻常字符的文件或目录名称的情况下):
~/.v/bundle find . -name config -print0 | grep -z ".git" | xargs --null grep "url"