複数の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
これが役に立つことを願っています。