如何使用 xargs -I 减少执行次数

如何使用 xargs -I 减少执行次数

find命令有两种方式执行某种xargs样式的操作。

find foo -exec bar '{}' baz ';'
find foo -exec bar '{}' baz '+'

它们之间的区别在于,第一个将每个找到的文件执行一次,第二个将对文件进行分组以减少执行次数。

当我看到xargs它有-I开关时,例如:

xargs -I{} foo bar {} baz

这将针对每个参数执行一次。

问题: 有没有办法减少 中 的执行xargs次数find

我想做这样的事情:

xargs -I{} echo start {} end << EOF
hello
world
EOF

并得到结果:

start hello world end

不是:

start hello end
start world end

答案1

我认为做到这一点的唯一方法是为您的命令制作一个简单的包装脚本:

#!/bin/sh
echo start "$@" end

那么你可以使用xargs echo-wrapper

当然,您可以内联执行此操作:

xargs sh -c 'echo start "$@" end' sh <<EOF
hello 
world
EOF

sh请注意末尾的额外内容- 这是语法的一部分,它在 shell 内部sh -c指定。$0

相关内容