我知道我可以xargs
用来获取文件列表并为每个文件运行一次命令。
我想做的是将文件列表作为单个参数列表传递给命令。例如:
ls | tail -10
输出
a
b
c
d
但我想将它传递给一个命令,该命令将收到这样的列表:
command a b c d
我猜xargs
这是完成这项工作的最佳工具,但我对任何事情都持开放态度。越简单记忆越好。
只需使用引号和变量扩展:
command "$(ls | tail)"
测试 ( command
):
#!/bin/bash
echo $1
输出:
a b c d
只是
ls|xargs command
会做。当然,如果列表没有超过命令行长度限制,
command `ls`
也足够了。
你可以试试:
command $(ls|tail -10|paste -s)
如果你想有空间作为分隔符:
command $(ls|tail -10|paste -s -d" ")
xargs 也有一个-n
选项,你可以试一试。例如:
kent$ seq 5
1
2
3
4
5
kent$ seq 5|xargs -n5
1 2 3 4 5