该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