~/mp3에는 mp3 파일이 있습니다.
내 스크립트:
#!/bin/bash
br=80
for a in $1*.{wav,mp3} ;
do ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3" ;
$1로 경로를 추가합니다.
myscript.sh /home/$USER/mp3/
하지만 오류가 있습니다.
/home/$USER/mp3/*.mp3: No such file or directory
따라서 스크립트가 실행되지 않습니다. ~mp3 디렉토리에서 스크립트를 실행할 때만 실행됩니다.
답변1
스크립트를 맨 위에 놓습니다.
shopt -s nullglob
이렇게 하면 귀하의 경우처럼 mp3가 없어도 오류가 발생하지 않을 것입니다.
와일드카드와 일치하는 mp3 파일이 없으면 쉘은 *.mp3
이를 문자 그대로 처리합니다.
답변2
.mp3
이는 디렉터리에 파일이 없기 때문에 발생합니다. .mp3
및 files 없이 디렉터리에서 이 조회를 수행 하면 .wav
파일에 대한 오류 와 파일 *.mp3
에 대한 오류 등 2개의 오류가 발생합니다.*.wav
간단한 해결책은 파일이 존재 .mp3
하거나 .wav
누락된 경우 테스트를 추가하는 것입니다.
for a in $1*.{wav,mp3}; do
test -f "$a" || continue
ffmpeg -i "$a" -ar 44100 -ab $br "$br""_tmp/${a%.*} ["$br"].mp3"
done
즉 말하자면,@스푸트닉해결책은 shopt -s nullglob
이것보다 낫습니다.
를 인용해야 하며 $1
해당 줄의 따옴표를 단순화할 수 있습니다 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