Ami*_*Ami 11 find shell-script
通过重新格式化保存有价值数据的分区,我设法在受伤的地方开枪(真的很糟糕)。当然,这不是故意的,但确实发生了。
但是,我设法使用testdisk
并photorec
恢复了大部分数据。所以现在我拥有分布在近 25,000 个目录中的所有数据。大多数文件是 .txt 文件,其余是图像文件。每个目录中有 300 多个 .txt 文件。
我可以grep
或使用find
从 .txt 文件中提取某些字符串并将它们输出到文件中。例如,这是我用来验证我的数据是否在恢复的文件中的一行:
find ./recup*/ -name '*.txt' -print | xargs grep -i "searchPattern"
Run Code Online (Sandbox Code Playgroud)
我可以将“searchPattern”输出到一个文件,但这只是给了我那个模式。这是我真正想要完成的:
浏览所有文件并查找特定字符串。如果在文件中找到该字符串,则将该文件的所有内容转换为输出文件。如果在多个文件中发现该模式,请将后续文件的内容附加到该输出文件中。请注意,我只是不想输出我正在搜索的模式,而是输出找到模式的文件的所有内容。
我认为这是可行的,但我只是不知道如何在从中获取特定模式后获取文件的所有内容。
phe*_*mer 10
如果我正确理解您的目标,以下将执行您想要的操作:
find ./recup*/ -name '*.txt' -exec grep -qi "searchPattern" {} \; -exec cat {} \; > outputfile.txt
Run Code Online (Sandbox Code Playgroud)
这将查找 中的所有*.txt
文件./recup*/
,对每个文件进行测试searchPattern
,如果匹配,则为cat
该文件。所有cat
ed 文件的输出将被定向到outputfile.txt
.
对每个模式和输出文件重复。
如果您有大量匹配的目录./recup*
,您可能会以argument list too long error
. 解决此问题的简单方法是执行以下操作:
find ./ -mindepth 2 -path './recup*.txt' -exec grep -qi "searchPattern" {} \; -exec cat {} \; > outputfile.txt
Run Code Online (Sandbox Code Playgroud)
这将匹配完整路径。所以./recup01234/foo/bar.txt
会匹配。该-mindepth 2
是如此,它会不匹配./recup.txt
,或./recup0.txt
。
归档时间: |
|
查看次数: |
28993 次 |
最近记录: |