Você precisa remover os espaços em torno de =
:
for i in *.jpg
do
j='echo $i | cut -d . -f 1'
convert $i $j".png"
done
for i in *.jpg
do
j = '$i | cut -d . -f 1'
convert $i $j".png"
done
temp.sh: linha 3: j: comando não encontrado
Eu sei sobre mogrify, só queria saber como fazer variáveis no bash.
Você precisa remover os espaços em torno de =
:
for i in *.jpg
do
j='echo $i | cut -d . -f 1'
convert $i $j".png"
done
Você também pode usar a expansão de parâmetro integrada do bash para remover primeiro ponto e tudo depois dele: j="${i%%.*}"
Se você quiser remover o último ponto e qualquer coisa após ele (ou seja, a extensão do arquivo), use: j="${i%.*}"
Exemplo:
$ i="file.with.dots.ext"
$ echo "${i%%.*}"
file
$ echo "${i%.*}"
file.with.dots
Além disso, seu script não funcionará como esperado se qualquer nome de arquivo contiver qualquer caractere especial (como um espaço). Você deve adquirir o hábito de sempre incluir referências de variáveis entre aspas duplas. Tente isto:
for i in *.jpg
do
j="$(echo "$i" | cut -d . -f 1)"
convert "$i" "${j}.png"
done
Integração expansão do parâmetro bash e aspas duplas para arquivos com caracteres especiais em seus nomes, e o código simplifica também:
for f in *.jpg; do
convert "$f" "${f%.*}.png"
done