処理するPDFファイルの順序を逆に置き換えます。

処理するPDFファイルの順序を逆に置き換えます。

コンテキスト: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.pdffile1.pdf.

そして:

$ print -r ./*.pdf(nOn)
./file11.pdf ./file10.pdf ./file3.pdf ./file2.pdf ./file1.pdf

後者は、数値比較を実行する一連の10進数withによってfile10.pdf行われます(これはGNUまたはGNUが実行するのと似ています)。file3.pdfnls -vsort -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シェル)をテストしましたが、期待した逆の順序でファイルをリンクしました。

関連情報