.mov 파일을 .mp4로 변환하는 빠른 bash 스크립트를 실행 중입니다. 이것은 99%의 경우 훌륭하게 작동하지만 때로는 올무에 걸리고 다음과 같은 오류가 발생합니다.
/home/jgeoffrey/Documents/HomeMovie/Test/year1video.mov.mov 파일 해당 파일이나 디렉토리가 없습니다.
보시다시피 파일 확장자가 어떤 이유로 파일 끝에 두 번 추가됩니까? 그렇지 않은 실제 디렉토리로 이동하면 해당 디렉토리는 한 번만 나타납니다.
이 문제가 발생하는 원인은 무엇이며 어떻게 해결합니까? 아래는 스크립트입니다:
#Scanning Documents for any mov files
for f in $(find /home/jgeoffrey/Documents -type f -name "*.mov");
do
#checking if a .mp4 exists
mp4=${f%.mov}.mp4
#if no .mp4 exist convert the file
if ! lsof $f && [ ! -e "$mp4" ];
then
#Converting the file to .mp4
avconv -i $f.mov -codec copy $f.mp4
fi
done
답변1
귀하의 명령에서 find
:
find /home/jgeoffrey/Documents -type f -name "*.mov"
.mov
변수를 사용하여 파일을 찾고 반복하고 있습니다 f
. 따라서 변수 값에는 $f
이미 .mov
파일이 포함되어 있습니다. 예를 들어 파일 중 하나가 foo.mov
.
다시 말하지만, avconf
입력 파일을 로 사용했으므로 $f.mov
파일 이름은 다음과 같습니다.
foo.mov.mov
오류 내용은 다음과 같습니다.
1년동영상.mov.mov: 해당 파일이나 디렉터리가 없습니다.
따라서 다음이 필요합니다.
avconv -i "$f" -codec copy "$mp4"
이미 제거되고 추가된 $mp4
파일 이름이 포함되어 있습니다 ..mov
.mp4
또한 파일 이름이 포함된 변수를 인용하십시오. 그렇지 않으면 공백이 있는 파일 이름의 경우 실패합니다.
또한 개행으로 구분된 파일 목록을 반복하는 동안 다음 while
대신 를 사용하십시오 for
.
find .... | while IFS= read -r f; do .....