grep“文件中的字符串”在子目录中,然后复制整个“文件夹”

grep“文件中的字符串”在子目录中,然后复制整个“文件夹”

我在尝试着:

  1. 在我的所有子目录(大约 50 个文件夹)中的所有文件(文件名:OUTCAR.txt)中查找字符串“required accuracy”。

  2. 仅将包含带有搜索字符串的文件的文件夹复制到另一个位置

我此时的解决方案:

1. grep -r "required accuracy" 

不过,我只想在名为 OUTCAR 的文件中搜索。否则,我的列表中的一个文件夹中有两个文件。

2. grep -r "required accuracy" OUTCAR -exec scp -r {} ./final location

我完全不知道如何从使用 grep 命令找到的文件列表中提取文件夹列表。也许可以使用 find 命令查找文件中的字符串?

答案1

如果您find-execdir可用的:

find . -type f -name "OUTCAR.txt" \
-exec grep -q "required accuracy" {} \;
-execdir scp -r ./ "/path/to/final location" \;
  • 查找所有带有 ( -type f) 的文件-name OUTCAR.txt
  • grep对于该文件中的“所需的准确性”,
  • 如果grep成功,请scp从该文件所在的目录运行-execdir...。

请注意,这/path/to/final/location应该是绝对路径,或者您可以使用$PWD/relative/path/from/where/find/is/executed.

答案2

尝试这个,

 grep -lr 'required accuracy' rel1 | sed 's#/OUTCAR.txt##g' | xargs -I {} mv {} rel1_fin
  • -l抑制正常输出;相反,打印通常会打印输出的每个输入文件的名称。扫描将在第一个匹配处停止

答案3

我认为这可能有帮助:

grep -Rl "required accuracy"  ./Source-dir/* | grep OUTCAR | xargs -I[] bash -c 'val="[]";scp -r ${val%/*} user@doman:/destination-direcory'

相关内容