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

Bor*_*lis 26 linux shell grep cp

我有一个工作grep命令,可以选择满足特定条件的文件.如何从grep命令中获取所选文件并将其输入cp命令?

以下尝试cp最终失败:

grep -r "TWL" --exclude=*.csv* | cp ~/data/lidar/tmp-ajp2/
Run Code Online (Sandbox Code Playgroud)

cp:在'/ home/ubuntu/data/lidar/tmp-ajp2 /'之后缺少目标文件操作数'尝试'cp --help'以获取更多信息.


cp `grep -r "TWL" --exclude=*.csv*` ~/data/lidar/tmp-ajp2/
Run Code Online (Sandbox Code Playgroud)

cp:无效选项 - '7'

kos*_*tya 32

grep -l -r "TWL" --exclude=*.csv* | xargs cp -t ~/data/lidar/tmp-ajp2/
Run Code Online (Sandbox Code Playgroud)

说明:

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

  • `-t`被认为是macOS sierra上`cp`的非法选项. (8认同)

Chr*_*aes 22

你需要带有占位符选项的xargs:

grep -r "TWL" --exclude=*.csv* | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
Run Code Online (Sandbox Code Playgroud)

一般来说,如果你使用xargs,它将把输出的命令,用占位符('{}'在这种情况下),你可以选择在那里插入的位置,甚至多次.


MAb*_*am1 5

当搜索具有特定日期的文件时,这对我有用:

 ls | grep '2018-08-22' | xargs -I '{}' cp '{}' ~/data/lidar/tmp-ajp2/
Run Code Online (Sandbox Code Playgroud)