如何通过xargs将目录名从find发送到grep?

时间:2018-05-29 20:30:33

标签: linux

.
├── 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

2 个答案:

答案 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