我有一个包含几个子目录的目录;在每个文件中,我都有一些文件。我想grep
仅对某些子目录执行 a 来查找与查询匹配的文件并将其删除;类似的东西 grep -rl --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . | rm
,但我不想解析stdin
from grep
。
我想我必须结合find
和rm
,但我不知道如何结合。
此外,似乎(至少在 Cygwin 中),我不能这样做 --exclude-dir={dir1, dir2},我必须将它们分开。这是一个小问题,但有人知道为什么这不起作用吗?
答案1
grep -rlZ --exclude-dir=dir1 --exclude-dir=dir2 HUMAN . |
xargs -r0 rm -f
如果要find
进行目录遍历:
find . -type d \( -name dir1 -o -name dir2 \) -prune -o \
-type f -exec grep -lZ HUMAN {} + |
xargs -r0 rm -f
可移植/标准地,这必须是:
find . -type d \( -name dir1 -o -name dir2 \) -prune -o \
-type f -exec grep -q HUMAN {} \; -exec rm -f {} +
但这意味着grep
每个文件运行一个。
为了--exclude-dir={dir1,dir2}
工作,您需要一个支持大括号扩展的 shell,例如 csh、tcsh、ksh、zsh、bash 或 Fish。