查找包含某些字符串的文件并使用 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

你所做的只是白费。使用;结束命令并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 中使用多个可执行文件来完成此任务

例如:

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 ;

最新更新