我想在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
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命令转义双引号来处理带双引号的文件名:
find
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