bash 스크립트의 입력 파일과 출력 파일의 이름을 동일하게 만들려면 어떻게 해야 합니까?

bash 스크립트의 입력 파일과 출력 파일의 이름을 동일하게 만들려면 어떻게 해야 합니까?

"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

관련 정보