Coloque no topo do script:
shopt -s nullglob
Dessa forma, se não houver mp3 como no seu caso (eu acho), não haverá erro.
Quando não houver nenhum arquivo mp3 correspondente ao caractere curinga, o shell executará *.mp3
literalmente.
dentro ~ / mp3 Eu tenho alguns arquivos mp3.
Meu script:
#!/bin/bash
br=80
for a in $1*.{wav,mp3} ;
do ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3" ;
com $ 1 adicione o caminho:
myscript.sh /home/$USER/mp3/
mas tenho o erro:
/home/$USER/mp3/*.mp3: No such file or directory
então, o script não é executado. É executado somente quando executo o script dentro do diretório ~ mp3.
Coloque no topo do script:
shopt -s nullglob
Dessa forma, se não houver mp3 como no seu caso (eu acho), não haverá erro.
Quando não houver nenhum arquivo mp3 correspondente ao caractere curinga, o shell executará *.mp3
literalmente.
Isso acontece porque não há arquivos .mp3
no diretório.
Se você executou essa aparência em um diretório sem os arquivos .mp3
e .wav
,
você receberia 2 erros, um para *.mp3
e um segundo para *.wav
arquivos.
Uma solução simples para que isso funcione mesmo quando .mp3
ou .wav
estão ausentes
é adicionar um teste se o arquivo existir:
for a in $1*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3"
done
Dito isto, a solução @sputnick com shopt -s nullglob
é melhor que isso.
Você também deve citar $1
e simplificar as citações na linha ffmpeg
:
for a in "$1"*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "${br}_tmp/${a%.*} [$br].mp3"
done
Tags bash