img2pdfとファイル名のスペースを処理するのに問題があります。

img2pdfとファイル名のスペースを処理するのに問題があります。

複数のjpegファイルをpdfファイルに変換しようとしています。

引用したファイル名を入力すると、すべてが正常です。

$ img2pdf "./Page 001.jpg" "./Page 002.jpg" -o book.pdf

ワイルドカードを使用すると、img2pdfに「./Page 001.jpg」の代わりに「./Page」が表示されるというエラーが発生します。

IOError: [Errno 22] 無効なパターン ('rb') またはファイル名: '"./Page'

これは私が使用するコマンドです:

$ img2pdf `find . -name "Page*.jpg" -printf "\"%p\" "` -o book.pdf

どのような問題が発生する可能性がありますか?

ご協力ありがとうございます

答え1

私はあなたがbashにいると仮定します。だから... bashは特定の文字を区切り文字として解釈します。デフォルト値は、空白(スペース、タブ、改行)である$ IFS(Internal Field Separator)環境変数の内容によって異なります。したがって、ファイル名でスペース文字を見つけると、それを区切り文字として解釈し、ファイル名を1つ以上の部分に分割します(見つかったスペース、タブ、または新しい行数によって異なります)。

解決策は、$ IFS値を必要に応じて変更することです。たとえば、あなたの場合、改行文字のみを区切り文字として解釈する必要があります。

# first save current value
OLD_IFS=$IFS

# change value to something you need
IFS="\n"

# do what you need to do here
#############################

# restore default value of IFS
IFS=$OLD_IFS

詳細については、この記事を参照してください。 IFSリファレンス

編集する:

私はimg2pdfでいくつかのテストを行いました。次の名前の写真が101枚あります。

名前_0.png、名前_1.png、名前_2.png、...、名前_100.png

test.pdfファイルに入れるには、次のコマンドを使用しました。 img2pdf -o test.pdf name_{0..100}.png

これには何の問題もありません。次に、名前にスペースが含まれているファイルに対して、次のように別のテストを実行しました。

名前0.png、名前1.png、名前2.png、...、名前100.png

コマンドは次のとおりです(バックスラッシュでエスケープされた空白文字)。 img2pdf -o test.pdf name\ {0..100}.png

これが役に立つことを願っています。

関連情報