Script de shell para converter PDF em imagens e salvar em subpasta

3

Estou tentando escrever um script bash que use o Imagemagick para converter PDFs em imagens em um determinado diretório (passado como um argumento) e, em seguida, salvar essa conversão em uma subpasta desse diretório. Eu tenho um script que funciona perfeitamente bem para converter e salvar no mesmo diretório, mas quando eu tento adicionar o caminho que eu gostaria de converter arquivos a serem salvos nas quebras de script.

Aqui está o que eu tenho até agora que funciona:

DIR="$@"
EXT="*.pdf"

mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
    convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "${pdffile%.*}".jpeg
done

Veja o que tentei salvar em uma subpasta. Se eu adicionar "imagens / ..." no entanto, para o último argumento em convertido da seguinte forma:

DIR="$@"
EXT="*.pdf"

mkdir -p "${DIR}images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
    convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "images/${pdffile%.*}".jpeg
done

Isso é o que acontece quando executo o script:

$ ls foo
bar.pdf  baz.pdf  biz.pdf
$ ./pdf-to-img.sh foo/
convert-im6.q16: unable to open image 'images/foo/bar.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image 'images/foo/baz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.
convert-im6.q16: unable to open image 'images/foo/biz.jpeg': No such file or directory @ error/blob.c/OpenBlob/2701.

O que estou fazendo de errado?

    
por Jon.H 12.05.2017 / 19:56

1 resposta

2

Código corrigido:

DIR="$@"
EXT="*.pdf"

mkdir -p "${DIR}/images"
shopt -s nullglob
for pdffile in "$DIR"*.pdf; do
    convert -density 300 -depth 8 -quality 90 -trim "${pdffile}" "$(dirname "${pdffile}")/images/$(basename "${pdffile%.*}").jpeg"
done

Deve transformar este caminho images/foo/bar.jpeg , o que causa erro, para este foo/images/bar.jpeg

Explicação:

Você tem valor como este "foo/bar.pdf" na variável ${pdffile}

dirname ${pdffile} - remove o último componente não-slash do caminho, deixando isto: "foo"

basename ${pdffile%} - por outro lado, remova todos, exceto o nome do arquivo, deixando o seguinte: "bar.pdf"

Por fim, insira o nome do subdiretório $images entre essas partes e obtenha o caminho necessário para armazenar imagens - foo/images/bar.jpeg .

    
por 13.05.2017 / 19:57