for i in *.jpg
do
j = '$i | cut -d . -f 1'
convert $i $j".png"
done
temp.sh: строка 3: j: команда не найдена
Я знаю о mogrify, просто хотел узнать, как сделать переменные в bash.
Вы должны удалить пробелы вокруг =
:
for i in *.jpg
do
j=`echo $i | cut -d . -f 1`
convert $i $j".png"
done
Вы также можете использовать расширение встроенного параметра bash , чтобы удалить первую точку и все после нее: j="${i%%.*}"
Если вы хотите удалить последнюю точку и все, что следует за ним (то есть расширение файла), используйте: j="${i%.*}"
Пример:
$ i="file.with.dots.ext"
$ echo "${i%%.*}"
file
$ echo "${i%.*}"
file.with.dots
Интеграция расширения параметра bash и двойных кавычек для файлов со специальными символами в именах, и код также упрощается:
for f in *.jpg; do
convert "$f" "${f%.*}.png"
done
Кроме того, ваш скрипт не будет работать должным образом, если какое-либо имя файла содержит какой-либо специальный символ (например, пробел). Вы должны иметь привычку всегда заключать ссылки на переменные в двойные кавычки. Попробуйте это:
for i in *.jpg
do
j="$(echo "$i" | cut -d . -f 1)"
convert "$i" "${j}.png"
done