我有10个名称为1到10的文件夹。每个文件夹下都有多个文件。我想在选择性文件夹中寻找一个模式,例如在名为2到6的文件夹中包含的文件中。如何在shell上实现这一点?我知道有一种方法可以使用shell脚本中的for循环来实现它,如下所述:
for ((i=2;i<=6;i++)); do grep 'pattern' $i/*; done
但在这种情况下,它将触发5个不同的grep命令,最后我需要整理这些命令。
是否有直接的正则表达式语法来完成此任务?
答案 0 :(得分:2)
如果我理解你的问题,你可以像以下那样进行支持扩展:
grep 'pattern' {2..6}/*
答案 1 :(得分: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