我在尝试着:
在我的所有子目录(大约 50 个文件夹)中的所有文件(文件名:OUTCAR.txt)中查找字符串“required accuracy”。
仅将包含带有搜索字符串的文件的文件夹复制到另一个位置
我此时的解决方案:
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'