我有一个关于在终端中连接两个进程的问题。我有一个包含超过 50,000 个文件的文件夹。我使用 grep 查找包含特定术语的文件:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files
这给了我一个像这样的巨大列表:
/var/cqp/upload/heideko/import_files/26629.vrt
/var/cqp/upload/heideko/import_files/32862.vrt
我需要将生成的文件复制到新文件夹中。我当时的想法是:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | cp * bio_files/
我的尝试可能没有任何意义。我刚开始使用终端。我只想将 grep 搜索到的文件复制到一个名为 bio_files 的新文件夹中。我意识到我从 grep 获得的只是文件的名称。但我想使用这些名称作为 cp 命令的输入。任何帮助都非常感谢。
答案1
使用xargs
和-t
选择cp
:
grep -inrl "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs cp -t bio_files/
如果您的文件名称中可能有空格,则请将所有内容都设为空分隔符:
grep -inrlZ "Bioethik_Debatte" /var/cqp/upload/heideko/import_files | xargs -0 cp -t bio_files/