Windows 배치 스크립트를 쉘 스크립트로

Windows 배치 스크립트를 쉘 스크립트로

Linux에서 실행하고 싶은 Windows 배치 스크립트가 있는데 이를 쉘 스크립트로 변환하는 데 문제가 있습니다.

누구든지 도움을 줄 수 있는지 궁금합니다.

:start
for /r %%F in (*.mkv) do (
C:\Python27\Scripts\ffmpeg\bin\ffmpeg.exe  -y -i "%%F" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "%%~dpnF.mp4"
if not errorlevel 1 if exist "%%~dpnF.mp4" del /q "%%F"
)
TIMEOUT /T 60
goto start

쉘 스크립트로 변환하려고 시도했지만 문제가 있습니다. 나는 이것에 능숙하지 않습니다.

for f in {*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}; do 
ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
rm "$f";

루프하는 방법을 잘 모르므로 지속적으로 확인합니다.

답변1

(bash를 가정하면) 더 비슷합니다:

shopt -s globstar
for f in **/*.mkv
do 
    ffmpeg -i "$f" -c:v libx264 -preset ultrafast -minrate 4.5M -maxrate 4.5M -bufsize 9M -c:a ac3 "${f%mkv}mp4";
    [[ $? -eq 0 ]] && rm "$f";
done

실제로:

  • done루프를 나타내는 문이 누락되었습니다.
  • 패턴 {*.mkv,*/*.mkv,*/*/*.mkv,*/*/*/*.mkv}이 올바르지는 않지만 ffmpeg는 일치하지 않는 각 패턴에 대해 오류 메시지를 발행합니다. globstar와 함께 **단일 패턴이 디렉터리 수준에서 작동하도록 만듭니다.
  • mp4로 트랜스코딩할 때 오류가 없는 경우에만 .mkv를 지우는 테스트를 마지막에 추가했습니다.

관련 정보