"2020-02-24-16-13.h264"와 같이 날짜 이름을 딴 파일로 작업하고 있습니다. MP4Box가 bash 스크립트에서 이러한 모든 파일을 처리하도록 하려고 하는데 출력 파일의 이름을 올바르게 지정하는 방법을 모르겠습니다.
기본적으로 스크립트가 자동으로 .h264 파일의 이름을 가져와 동일한 이름인 .mp4로 출력하기를 원합니다.
이 작업을 수동으로 수행하는 데 사용하는 명령은 다음과 같습니다.
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
제 경우에는 ffmpeg
해결 방법으로 전환할 수 없습니다.
이것이 간단한 명령 조정이었으면 좋았을 텐데, 어떤 의견이라도 보내 주시면 대단히 감사하겠습니다!
답변1
이 같은.
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
산출
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Convert/2020-02-24-16-13.mp4
다음으로 끝나는 파일이 많은 경우*.h264
for f in /mnt/usb/Convert/*.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
이것을 내부에서 사용한다면 /mnt/usb/Convert
.
for f in *.h264; do
echo MP4Box -add "$f" "${f%.*}.mp4"
done
변환된 파일을 OP의 원래 질문이었던 Converted 디렉토리로 출력합니다(이 점을 알아채지 못해 죄송합니다.)
for f in /mnt/usb/Convert/2020-02-24-16-13.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
산출.
MP4Box -add /mnt/usb/Convert/2020-02-24-16-13.h264 /mnt/usb/Converted/2020-02-24-16-13.mp4
모든 파일을 일괄 처리합니다.
for f in /mnt/usb/Convert/*.h264; do
n=${f/Convert/Converted}
echo MP4Box -add "$f" "${n%.*}.mp4"
done
${string/search/replace}
bash PE 관련 대안
for f in /mnt/usb/Convert/*.h264; do
n=${f##*Convert}
m=${f%Convert*}
echo MP4Box -add "$f" "${m}Converted${n%.*}.mp4";
done
위(마지막 예)는 bash 구문에만 국한되지 않고 모든 POSIX 호환 셸에서 작동합니다.
echo
출력이 만족스러우면 삭제하세요.매개변수 확장 보기
PAGER='less +/^[[:space:]]*parameter\ expansion' man bash