2016-07-23 2 views
1
for f in ./*.mp3; do sox "$f" "${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 

이것은 오디오 파일을 처리하는 데 사용하는 스크립트입니다. 문제는 새로운 오디오 파일을 처리하면서 계속 반복됩니다. 나는 하위 폴더에 출력 이동을함으로써이 문제를 해결하고 싶습니다, 그래서이 시도 :일괄 처리 스크립트에서 선행 "./"을 제거하십시오.

for f in ./*.mp3; do sox "$f" "/subfolder${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 

이것은 출력 :

/subfolder./01processed.mp3 

이 나에게 삭스 오류를주고있다 I 파일 이름 출력 전에 ./을 제거해야합니다. 어떻게해야합니까? 이것은 내가 가지고 싶은 출력됩니다 : 당신은 제거 할 수

/subfolder/01processed.mp3 

답변

1
for f in *.mp3; do sox "$f" "/subfolder/${f%%.mp3}processed.mp3" silence 1 0.02 1% -1 0.02 1%; done 
+0

나는 그것을 시도했지만 여전히 작동하지 않는다. 그러나 앞에 "." 이제 작동합니다. 'dox "$ f" "./subfolder/${f%%.mp3}processed.mp3"침묵 1 0.02 1 % -1 0.02 1 %; done ' – Marw

+0

@Marw "."을 추가하지 말고 "/"를 제거하십시오 (즉, 하위 폴더/$ {f %%. mp3} processed.mp3 "'). –

0
for f in ./*.mp3; do 
    out=${f#./} 
    out=${out%%.mp3}processed.mp3 
    sox "$f" "/subfolder/$out" silence 1 0.02 1% -1 0.02 1% 
done 

모두 ./을 선도하고 mp3 후행하지만, 매개 변수 확장은 (한 번에 하나씩 그들이 할 수있는 수행해야 ' t 중첩). 의 경우은 선도 경로 인 . 만 제거하고 출력 경로를 빌드 할 때는 /을 그대로 사용합니다. 그러나 명시 적으로 꺼내어 다시 명시해야합니다. (/subfolder$out는 분명히 파일이 아니라 subfolder$out라는 이름의 파일/폴더를 만드는 것보다, subfolder라는 이름의 폴더에 저장되고 있는지 확인하지 않습니다.)

덧붙여, for f in ./*.mp3 가장 올바른 버전이며,이 파일 작업을하기 때문에 -으로 시작하는; 그렇지 않으면 sox은 옵션의 입력 파일 이름을 잘못 이해할 수 있습니다.

+0

실제로 아무 것도 제거하지 않아도됩니다. 'subfolder /./ file'은 완벽하게 괜찮습니다. –

관련 문제