bash는 일부 파일을 처리하기 위한 경로를 추가합니다.

bash는 일부 파일을 처리하기 위한 경로를 추가합니다.

~/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

관련 정보