我正在尝试在当前目录中查找包含特定字符串的文件,并将所有这些文件的副本复制到新目录中。
我要使用的纸条
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
答案 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 \;