이 이름 변경 방법에서 마음에 들지 않는 점은 EXIF 날짜 및 타임 스탬프에 사용 된 콜론 (예 : "2013 : 09 : 03 20 : 55 : 09_IMG_0108.JPG")으로 나중에이 파일을 다른 환경으로 전송할 때 문제가 발생할 수 있습니다 ( 예) Windows).
다음과 같이 이름 지정 체계를 실행하여 sed
콜론을 대시로 바꾸고 공백을 밑줄로 바꿀 수 있습니다.
mv -i "$i" "$(exiftool -CreateDate "$i" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$i"
전체를 소문자로 만드는 경우 다음을 사용할 수 있습니다 rename
.
rename 's/(.*)/\L$1/' file.JPG
## or
rename 's/(.*)/\L$1/' *.*
또는 다음과 같이을 사용하여 스크립트 내에서 수행 할 수 있습니다 sed
.
j=$(echo "$i" | sed -e 's/\(.*\)/\L\1/')
... 다음 사용 $j
최종 대신에 변수를 $i
당신의 mv
라인. 다른 sed 배포판은 다른 이름 바꾸기 명령을 가지고 있지만 sed는 보편적 이므로이 sed 방식은 약간 더 이식성이 있습니다 (중요한 경우).
또는 대신 스크립트를 다음과 같이 수정하여 tr
대신 처음에 소문자로 파일 이름 변환을 수행 할 수 있습니다 .
for arg
do
tmp="$(echo "$arg" | tr '[A-Z]' '[a-z]')"
mv -i "$arg" "$(exiftool -CreateDate "$arg" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_$tmp"
done
다른 파일 유형에 대해 약간 다른 명령을 수행하기 위해이 스크립트에서 bash case 문을 사용할 수 있습니다. 예를 들면 다음과 같습니다.
#! /usr/bin/env bash
for filename in ./*
do
tmp="$(echo "$filename" | tr '[A-Z]' '[a-z]')"
case "$filename" in
*.MOV|*.mov)
mv -i "$filename" "$(exiftool -a -s -CreateDate-tur "$filename" | awk -F ': ' '{print $2}' | sed -e 's/\-[0-9][0-9]\:00//g' -e 's/\+[0-9][0-9]\:00//g' -e 's/:/-/g' -e 's/ /_/g')_$tmp"
;;
*.JPG|*.jpg)
mv -i "$filename" "$(exiftool -a -s -CreateDate "$filename" | awk -F ': ' '{print $2}' | sed -e 's/:/-/g' -e 's/ /_/g')_"$tmp""
;;
*)
echo 'Not a *.jpg or a *.mov!'
;;
esac
done
이 예에서, JPG 파일 이후 또는 JPG 파일이 시작되기 전 또는 이후에 시간 단위가 CreateDate 인 타임 스탬프가있는 MOV 파일의 이름을 바꾸려면 다른 (-tur) EXIF 데이터를 사용하여 해당 시차 접미사를 제거하고 -tur 부분 을 변경해야 할 수도 있습니다. 시스템에 설정된 위치에 따라