.
├── AAA
│ └── 01.txt
├── AAA_X
│ └── 03.txt
├── BBB
│ └── 02.txt
└── BBB_X
└── 04.txt
$ find . -not -name \*_X -type d -print0 | xargs -0 -n1 -I {} grep 'Hello' {}/\*.txt
grep: ./*.txt: No such file or directory
grep: ./AAA/*.txt: No such file or directory << Why failed here?
grep: ./BBB/*.txt: No such file or directory
$ grep 'Hello' AAA/*.txt
Hello
问题&GT;如何使用grep
将目录名称从find
传递到xargs
?
答案 0 :(得分:0)
问题是xargs
没有通过shell执行命令。
您应该使用-name '*.txt'
直接在find
命令中获取文件。要排除*_X
目录,您可以使用-prune
:
find . -type d -name '*_X' -prune -o -name '*.txt' -exec grep 'Hello' {} +
答案 1 :(得分:0)
为什么不使用--exclude with grep?
grep --exclude=*_X/*.txt Hello */*.txt