1

我有 10 个名称为 1 到 10 的文件夹。每个文件夹下都有多个文件。我想在选择性文件夹中寻找模式,例如在名为 2 到 6 的文件夹中包含的文件中。如何在 shell 上实现这一点?我知道有一种方法可以在 shell 脚本中使用 for 循环,如下所述:

for ((i=2;i<=6;i++)); do grep 'pattern' $i/*; done

但在这种情况下,它将触发 5 个不同的 grep 命令,我最终需要对其进行整理。

是否有直接的正则表达式语法来完成此操作?

4

2 回答 2

2

如果我正确理解了您的问题,您可以进行大括号扩展,例如:

grep 'pattern' {2..6}/*
于 2013-10-20T19:16:48.703 回答
2

您可以使用-r选项和--exclude-dir选项。

-r, --recursive
Read all files under each directory, recursively, following symbolic links only 
if they are on the command line.  This is equivalent to the -d recurse option.


--exclude-dir=DIR
Exclude directories matching the pattern DIR from recursive searches.

演示

ls
f1 f2  f3  f4  f5  f6  f7  f8  f9 f10

每个文件夹都包含一个文件file,其中包含字符串abc

$ grep --exclude-dir 'f[1,7-9]' --exclude-dir 'f10' -r 'abc'       
f5/file:abc
f4/file:abc
f2/file:abc
f3/file:abc
f6/file:abc
于 2013-10-20T19:23:02.920 回答