如何告诉 xargs 选择哪个参数?

如何告诉 xargs 选择哪个参数?

当 xargs 将第一个命令的输出重定向到第二个命令的参数并且无法选择哪个参数对应输出的哪个元素时,那么只有一种方法,例如:

ls | xargs file  # there are as many arguments as files in the listing,
                 # but the user does not have too choose himself

现在如果需要选择的话:

ls | xargs file | grep image | xargs mv.....   # here the user has to 
                                               # deal  with two arguments of mv, first for source second for destination, suppose your destination argument is set already by yourself and you have to put the output into the source argument. 

如何告诉 xargs 将第一个命令的标准输出重定向到您选择的第二个命令的参数中?

在此输入图像描述

答案1

您可以使用-I定义一个占位符,该占位符将替换为传递给 的参数的每个值xargs。例如,

ls -1 | xargs -I '{}' echo '{}'

将从的输出echo中每行调用一次。ls您会经常看到'{}'使用,大概是因为它与find的占位符相同。

在您的情况下,您还需要预处理file的输出以提取匹配的文件名;因为那里有一个grep我们可以用它awk来做这两个事情,并简化file调用:

file * | awk -F: '/image/ { print $1 }' | xargs -I '{}' mv '{}' destination

如果你有 GNU,mv你可以使用它-t来传递多个源文件:

file * | awk -F: '/image/ { print $1 }' | xargs mv -t destination

相关内容