Paxana Non Grata
Paxana Non Grata

Reputation: 389

sort files before converting to pdf in imagemagick

I have a folder full of image files I need to convert to a pdf. I used wget to download them. The problem is the ordering linux gives the files isn't the actual order of the pages, this is an example of the file ordering:

100-52b69f4490.jpg
101-689eb36688.jpg
10-1bf275d638.jpg
102-6f7dc2def9.jpg
103-2da8842faf.jpg
104-9b01a64111.jpg
105-1d5e3862d8.jpg
106-221412a767.jpg
...

I can convert these images to a pdf using imagemagick, with the command convert *.jpg output.pdf

but it'll put the pages into that pdf in the above order, not in human readable numerical order 1-blahblahblah.jpg, 2-blahblahblah.jpg, 3-blahblahblah.jpg etc.

Is the easiest way to do this pipe the output of sort to convert? or to pipe my wget to add each file as I'm getting it to a pdf file?

Upvotes: 4

Views: 3629

Answers (3)

uri
uri

Reputation: 31

Here one bash script to do it that:

#!/bin/bash
sort -n < list.txt > sorted_list.tmp
readarray -t list < sorted_list.tmp
convert "${list[@]}" output.pdf
rm sorted_list.tmp
exit

You can get list.txt by first listing your directory with ls > list.txt. The sort -n (numerical sort) "normalizes" your entries. The sorted list is saved in the .tmp file and deleted at the end. Greetings,

Upvotes: 0

Qwentin
Qwentin

Reputation: 111

convert $(ls -1v *.jpg) book.pdf

worked for me

Upvotes: 11

Mark Setchell
Mark Setchell

Reputation: 207425

There are several options:

The simplest is as follows, but may overflow your command-line length if you have too many pages:

convert $(ls *jpg | sort -n) result.pdf

Next up is feeding the list of files on stdin like this:

ls *jpg | sort -n | convert @- result.pdf

Upvotes: 7

Related Questions