Qualquer solução que use o comando ls
irá eventualmente falhar, mas não se preocupe; O bash pode manipular qualquer nome de arquivo com segurança sem envolver um comando externo (como ls
) para "listá-los".
Para criar um nome de arquivo.jpg a partir de cada nome de arquivo.pdf no diretório atual, você pode fazer:
for file in ./*.pdf; do
convert "$file[0]" "${file%.pdf}.jpg"
done
Você também pode fazer isso em uma linha
for file in ./*.pdf; do convert "$file[0]" "${file%.pdf}.jpg"; done
As aspas duplas ( "
) são muito importantes para evitar a expansão das palavras e do nome do caminho a partir do resultado das expansões dos parâmetros.
$file
e ${file%.pdf}
são chamados de expansões de parâmetros. Consulte o link e o link para mais informações sobre expansões de parâmetros e manipulação de strings no bash em geral.
EDITAR: E lendo a pergunta novamente, vejo que você queria os jpegs no diretório pai dos pdfs, então incluirei as modificações necessárias para isso também:
for file in pdf/*.pdf; do
basename=${file##*/}
convert "$file[0]" "./${basename%.pdf}.jpg"
done