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