我正在尝试查找当前目录中包含某个字符串的文件,并将所有这些文件复制到新目录中。
我正在尝试使用的股票
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 ;