我有一个文件夹,它有文件夹和子文件夹。
此文件夹和子文件夹包含类似的文件
input_abc.txt
input_def.txt
pattern1是'RCA'pattern2为“ RSA”
文件夹信任:
文件夹-子文件夹-子文件夹:input_abc.txt:input_def.txt
[我必须从文件名为input_abc.txt
的文件中获取字符串“ pattern1”的计数,并且必须从这些子文件夹中的文件名为input_def.txt
的文件中获取字符串“ pattern2”的计数。
如何获得pattern1的计数以及文件名input_abc.txt
和模式2以及Linux中这些文件夹和子文件夹中的文件名input_def.txt
。
也许您需要find -iname NAME -exec grep -inr PATTERN {} \+
:
➜ a tree
.
├── b
│ ├── abc.txt
│ └── def.txt
└── c
├── abc.txt
├── def.txt
└── ghi.txt
2 directories, 5 files
➜ a for f in {b,c}/*; do printf "$f -- "; cat $f; done
b/abc.txt -- patt1
b/def.txt -- patt2
c/abc.txt -- patt1
c/def.txt -- patt2
c/ghi.txt -- patt1
➜ a find . -iname abc.txt -exec grep -inr PATT1 {} \+
./c/abc.txt:1:patt1
./b/abc.txt:1:patt1
这里会发生什么?
find
查找具有给定名称的所有文件(这是一个glob,而不是正则表达式):-i
表示忽略大小写,-exec
对找到的文件运行以下命令(grep ...
)(由{}
)。
[请注意\+
,这意味着将所有找到的文件传递给单个grep(如果要将每个文件传递给不同的\;
,请使用grep
-将不会显示文件名)。] >
您可以看到patt1
位于b/abc.txt
,c/abc.txt
和c/ghi.txt
中,但是find
将忽略后者(名称不匹配),并且grep
将不在该文件上运行。