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

Find Files Containing Certain String and Copy To Directory Using Linux

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

我正在尝试使用的凭证

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

编辑:整理后(见评论)...

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

你所做的只是徒劳的greping。使用 ; 结束命令并且 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。当你给一个变量赋值时,你只需写下变量的名称。当你想得到变量的值时,你在它前面放一个$

您可以在 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 \;