![현재 폴더의 모든 파일을 여러 확장자로 변환하고 bash를 사용하여 이름을 유지하는 깔끔한 방법](https://linux55.com/image/198334/%ED%98%84%EC%9E%AC%20%ED%8F%B4%EB%8D%94%EC%9D%98%20%EB%AA%A8%EB%93%A0%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%97%AC%EB%9F%AC%20%ED%99%95%EC%9E%A5%EC%9E%90%EB%A1%9C%20%EB%B3%80%ED%99%98%ED%95%98%EA%B3%A0%20bash%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%9D%B4%EB%A6%84%EC%9D%84%20%EC%9C%A0%EC%A7%80%ED%95%98%EB%8A%94%20%EA%B9%94%EB%81%94%ED%95%9C%20%EB%B0%A9%EB%B2%95.png)
다양한 유형의 파일이 포함된 폴더가 있습니다. 예를 들어 모든 결말을 변환하고 싶습니다.
.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
올바르게 처리됩니다.