如何将输出从grep管道输出到cp?

时间:2015-10-15 05:31:50

标签: linux shell grep cp

我有一个工作grep命令,用于选择符合特定条件的文件。如何从grep命令中获取所选文件并将其输入cp命令?

以下尝试在cp结束时失败了:

grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/
  

cp:丢失后的目标文件操作数   '/ home / ubuntu / data / lidar / tmp-ajp2 /'试试cp --help'更多   信息。

cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/
  

cp:无效选项 - ' 7'

5 个答案:

答案 0 :(得分:29)

grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/

说明:

  • grep -l选项仅输出文件名
  • xargs将文件列表从标准输入转换为命令行参数
  • cp -t选项指定目标目录(并避免使用占位符)

答案 1 :(得分:16)

占位符选项需要 xargs

grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/

通常如果您使用xargs,它会将输出放在命令之后,使用占位符(在这种情况下为'{}'),您可以选择它所在的位置插入,甚至多次。

答案 2 :(得分:4)

这对于搜索具有特定日期的文件非常有用:

i

答案 3 :(得分:0)

要将文件复制到grep找到的目录,请使用-printf输出目录,使用-i从xarg(管道后)放置命令参数

find ./ -name 'filename.*' -print '%h\n' | xargs -i cp copyFile.txt {}

将copyFile.txt复制到包含“filename”

的所有目录(./。)

答案 4 :(得分:0)

grep -rl'/ directory /'-e'pattern'| xargs cp -t /目录