다양한 유형의 파일이 포함된 폴더가 있습니다. 예를 들어 모든 결말을 변환하고 싶습니다.
.ogg .flac, .m4a
이런 식으로 작동하는 명령을 사용하십시오
converter inputfilename outputpath/ouputfilename.outputextension
나는 열심히 노력했다
for audfile in *.ogg *.m4a *.flac; do
filename=${audfile%.*}
converter "$audfile" "done/$audfile.mp3"
done
이는 또한 일치하는 파일이 없는 모든 확장자에 대해 해당 파일이나 디렉터리가 없음을 인쇄하는 문제도 있습니다(일치하지 않는 형식을 무시하는 것이 더 우아할 것입니다). 이 작업을 정확하고 간결하게 수행하는 방법을 어떻게 제안합니까?
답변1
사람들은 종종 디렉토리 출력을 반복해서는 안 된다고 말하는데, 제 생각에는 와일드카드가 *
와일드카드와 비슷할 것 같습니다.
대신 이 -exec
옵션을 사용해야 합니다 .find
find . -maxdepth 1 -name "*.ogg" -exec converter {} done/{}.mp3 \;
이것은 "현재 디렉토리에서 .ogg로 끝나는 모든 파일을 찾고 (더 이상 보지 않고) 명령 변환기 filename.ogg did/filename.ogg.mp3을 실행하십시오"라고 말합니다.
find 명령은 수행해야 하는 모든 이스케이프를 처리해야 하므로 The Hedgehog Song.ogg
및 모두 The_Hedgehog_Song.ogg
올바르게 처리됩니다.