如何在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命令,请参阅@joeytwiddle在@andrewdotn答案中的讨论。以下解决方案还使用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中的命令中间传递带有xargs的所有参数 的全部内容, 来源链接: utcz.com/qa/416072.html

回到顶部