linux - 如何在Linux中的命令中间传递带有xargs的所有参数

标签 linux xargs

我想把所有文件作为一个参数在Linux上传递,但是我不能这样做。
这很管用

ls | sort -n | xargs  -i pdftk  {} cat output combinewd2.pdf

每个命令传递一个参数,但我希望所有参数都在一个命令中。

最佳答案

这是一种方法

pdftk $(ls | sort -n) cat output combinewd2.pdf

或者用反勾
pdftk `ls | sort -n` cat output combinewd2.pdf

正如注释中指出的,这将不适用于包含空格的文件名。在这种情况下,您可以使用eval
eval pdftk $(while IFS= read -r file; do
    echo \"$file\"
done < <(ls | sort -n)) cat output combinewd2.pdf

假设有两个名为“0 foo”和“1 bar”的文件,那么eval的结果将是所需的命令,文件名用双引号括起来:
pdftk " 0 foo " " 1 bar " cat output combinewd2.pdf

如果文件名可能包含换行符,则使用find命令,请参阅@andrewdotn答案注释中@joeytwidle的讨论。
以下解决方案还使用sed命令转义双引号来处理带双引号的文件名:
eval pdftk $(while IFS= read -r -d '' file; do
    echo \"$file\"
done < <(find . -maxdepth 1 -type f -print0 | \
    sed 's/"/\\"/g'| sort -zn)) cat output combinewd2.pdf

关于linux - 如何在Linux中的命令中间传递带有xargs的所有参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58530307/

相关文章:

linux - 使用 xargs(并行)时如何获取退出代码

linux - 使用 xargs 处理文件以实现并发

shell - xargs 在换行符处拆分而不是空格

c - 删除链表元素

python - 为什么线程 ID 变得这么大

linux - Kubernetes与Linux之间的兼容性

Homebrew 查找不依赖任何其他已安装包的已安装包

linux - xargs -0 产生新行

linux - 有没有办法在 Fortinet CLI 中运行 bash 命令?

linux - 为什么 Mongodb 在 Linux 上的性能比在 Windows 上更好?