현재 폴더의 모든 파일을 여러 확장자로 변환하고 bash를 사용하여 이름을 유지하는 깔끔한 방법

현재 폴더의 모든 파일을 여러 확장자로 변환하고 bash를 사용하여 이름을 유지하는 깔끔한 방법

다양한 유형의 파일이 포함된 폴더가 있습니다. 예를 들어 모든 결말을 변환하고 싶습니다.

.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올바르게 처리됩니다.

관련 정보