【问题标题】:Find Files Containing Certain String and Copy To Directory Using Linux使用 Linux 查找包含特定字符串的文件并复制到目录
【发布时间】:2018-09-21 21:23:54
【问题描述】:

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

我正在尝试使用的脚本

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

【问题讨论】:

标签: linux putty


【解决方案1】:

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

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

你所做的只是徒劳无功。使用; 结束命令,cp 打印错误消息,因为您只提供源,而不是目标。

你想要做的是以下。首先,您要查找文件名,而不是字符串(您没有提供)。

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。当您为变量赋值时,您只需编写变量的名称。当你想得到变量的值时,你可以在它前面放一个$

【讨论】:

  • 我想提取名称中所有名称为“QTR_1_RESULTS”的文件,当我不知道整个文件名时,我不知道该放什么文件名。我想一次复制多个文件。
  • @MariaNazari 哦,我以为你在文件中寻找一个字符串。这就是grep 的用途。编辑了我的答案。
  • 对于原始答案(文件中的字符串,而不仅仅是文件名中的字符串)不要忘记将 $filename 放在引号中以防路径中有空格:grep -l the_string_you_are_looking_for *Qtr_1_results* | while read -r filename; do cp "$filename" /path/to/your/destination/folder; done
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-06
    • 2014-12-23
    • 2017-01-17
    • 1970-01-01
    相关资源
    最近更新 更多