查找包含某些字符串的文件并使用Linux复制到目录

时间:2018-09-21 21:23:55

标签: linux putty

我正在尝试在当前目录中查找包含特定字符串的文件,并将所有这些文件的副本复制到新目录中。

我要使用的纸条

grep *Qtr_1_results*; cp /data/jobs/file/obj1

我无法复制,并且输出消息是:

Usage: cp [-fhipHILPU][-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src target
       or: cp [-fhipHILPU] [-d|-e] [-r|-R] [-E{force|ignore|warn}] [--] src1 ... srcN directory

2 个答案:

答案 0 :(得分:1)

编辑:清除所有内容后(请参见评论)...

cp *Qtr_1_results* /data/jobs/file/obj1

您所做的只是一无所获。使用;可以结束命令,而cp将显示错误消息,因为您仅提供源,而不提供目标。

您要执行的操作如下。首先,您要grep输入文件名,而不是字符串(未提供)。

grep -l the_string_you_are_looking_for *Qtr_1_results*

-l选项为您提供文件名,而不是找到the_string_you_are_looking_for的行。在这种情况下,grep将搜索文件名包含Qtr_1_results的所有文件。

然后,您要将grep的输出发送到while循环以对其进行处理。您可以使用管道(|)进行此操作。分号;只是结束行。

grep -l the_string_you_are_looking_for *Qtr_1_results* | while read -r filename; do cp $filename /path/to/your/destination/folder; done

while循环中,read -r将把grep的输出放入变量filename中。当您将值赋给变量时,只需写出变量名即可。如果要获取变量的值,请在其前面放置一个$

答案 1 :(得分:0)

您可以在find中使用多个exec来完成此任务

例如:

find . -type f -exec grep -lr "Qtr_1_results" {}  \; -exec cp -r {} /data/jobs/file/obj1 \;

详细信息:

查找包含该字符串的所有文件。 grep -l将列出文件。

find . -type f -exec grep -lr "Qtr_1_results" {} \;

第一部分的结果集是文件列表。将每个文件从结果复制到目标。

-exec cp -r {} /data/jobs/file/obj1 \;