bash adiciona caminho para manipular alguns arquivos

3

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.

    
por watchmansky 25.12.2014 / 22:05

2 respostas

3

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.

    
por 25.12.2014 / 22:09
2

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
    
por 25.12.2014 / 22:10

Tags