스크립트가 확장을 두 번 추가합니다.

스크립트가 확장을 두 번 추가합니다.

.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 .....

관련 정보