コンテキスト:Catalina = zsh(優先)または16.04 Ubuntu = bash
たとえば、次のようqpdf
になります。
# To merge (concatenate) all the pages of a list of PDF files and save the result as a new PDF:
qpdf --empty --pages <file1.pdf> <file2.pdf> <file3.pdf> -- <output.pdf>
特定のディレクトリにある一連の.pdfファイル(ファイル名にスペースを含む)が関連付けられています。
# Concatenate Drafts file to ../concatDrafts.pdf (76 pdf files)
# https://stackoverflow.com/a/53754681/4953146
qpdf --empty --pages *.pdf -- out.pdf
しかし、qpdf
注文する.pdfファイルをリンクするには、.pdfファイルを逆順にリンクする必要があります。処理するファイルの順序は、次のように返されます。
ls -r.pdf
.pdfファイル名のスペースを処理するには: xargsの研究以下が必要であることを示します。
ls -r *.pdf | xargs -E '\n'
lsの出力をコマンド内のコマンドにパイプする事故プロセスは何ですかqpdf
?
答え1
その内容はzsh
次のとおりです。
qpdf --empty --pages ./*.pdf(On) -- output.pdf
On
一つはどこにありますか?グローバル予選拡張によって逆順にグローブをソートしますo
(大文字O
、小文字は直接を意味します)n
。
n
名前を数字で並べ替えるためにglob修飾子を追加することもできます。
qpdf --empty --pages ./*.pdf(nOn) -- output.pdf
比較する:
$ print -r ./*.pdf(On)
./file3.pdf ./file2.pdf ./file1.pdf ./file11.pdf ./file10.pdf
$ (LC_ALL=C; print -r ./*.pdf(On))
./file3.pdf ./file2.pdf ./file11.pdf ./file10.pdf ./file1.pdf
(語彙的には、文字列を比較するときに最初の近似の句読点(ここ)を無視するロケールの前にもfile10.pdf
同じです。)file2.pdf
file1.pdf
.
そして:
$ print -r ./*.pdf(nOn)
./file11.pdf ./file10.pdf ./file3.pdf ./file2.pdf ./file1.pdf
後者は、数値比較を実行する一連の10進数withによってfile10.pdf
行われます(これはGNUまたはGNUが実行するのと似ています)。file3.pdf
n
ls -v
sort -V
答え2
答えを活用してくださいシェルパラメータをどのように変更しますか?*.pdf
拡張コンテンツを反転します。まず、シェルの位置引数として保存します。
set -- *.pdf
次に、リンクされた質問に良い答えを使用してください。私は選ぶこれ:
flag=''; for a in "$@"; do set -- "$a" ${flag-"$@"}; unset flag; done
今すぐ"$@"
好きなように拡張してみてください。必要なコマンドでこれを使用します。
qpdf --empty --pages "$@" -- out.pdf
以前の場所パラメータを失わないようにするには、サブシェルでこれら3つのコマンドを実行します。
答え3
(GNU bashシェル用)
tac
リバースパラメータリストを使用できますxargs
。実行したコマンドの場合、qpdf
最後に2つの追加引数--
とを結合する必要がありました。out.pdf
ここでは、改行文字がパラメータ区切り文字として使用されます。つまり、改行文字を含むファイル名は処理されません。
printf "%s\n" "out.pdf" "--" *.pdf | tac | xargs -d'\n' qpdf --empty --pages
ここでは、ファイル名に null 区切り文字を使用します。
printf "%s\0" "out.pdf" "--" *.pdf | tac -s $'\0' | xargs -0 qpdf --empty --pages
(LinuxのGNU Bashシェル)をテストしましたが、期待した逆の順序でファイルをリンクしました。