1. ホーム
  2. linux

[解決済み] Linuxで複数のjpgを1つのpdfに結合する。

2023-06-22 07:07:13

質問

私は以下のコマンドを使って、すべての jpg ファイルを 1 つの pdf ファイルに変換してマージしました。

convert *.jpg file.pdf

ディレクトリ内のファイルには、以下の番号が振られています。 1.jpg から 123.jpg . 変換はうまくいったのですが、変換後、ページがすべて混在してしまいました。私は、pdfのページが 1.jpg から 123.jpg のように、名前と同じ順番で表示されます。以下のコマンドでも試してみました。

cd 1 
FILES=$( find . -type f -name "*jpg" | cut -d/ -f 2)
mkdir temp && cd temp 
for file in $FILES; do 
    BASE=$(echo $file | sed 's/.jpg//g');
    convert ../$BASE.jpg $BASE.pdf; 
    done && 
pdftk *pdf cat output ../1.pdf && 
cd .. 
rm -rf temp

でもまだダメです。オペレーティング プラットフォームは Linux です。

どのように解決するのですか?

この問題は、シェルが純粋にアルファベット順でワイルドカードを展開しているためで、数字の長さが異なるため、順序が正しくありません。

$ echo *.jpg
1.jpg 10.jpg 100.jpg 101.jpg 102.jpg ...

解決策は、変換コマンドを実行する前に、ファイル名を同じ長さになるように必要に応じてゼロで埋め合わせることです。

$ for i in *.jpg; do num=`expr match "$i" '\([0-9]\+\).*'`;
> padded=`printf "%03d" $num`; mv -v "$i" "${i/$num/$padded}"; done

これで、ファイルは正しい順序でワイルドカードにマッチし、convertコマンドの準備ができました。

$ echo *.jpg
001.jpg 002.jpg 003.jpg 004.jpg 005.jpg 006.jpg 007.jpg 008.jpg ...