나는 다음 스크립트를 사용하여 사진을 "날짜" 디렉터리로 정리했습니다.
for x in *.JPG; do
d=$(date -r "$x" +%Y-%m-%d)
mkdir -p "$d"
mv -- "$x" "$d/"
done
이 스크립트는 훌륭하게 작동합니다. 내 사진 파일은 사진을 촬영한 날짜와 시간인 "IMG_20131125_090000.JPG"와 동일한 명명 규칙을 따릅니다. 위의 스크립트를 변경하여 여전히 날짜 디렉토리로 정렬하지만 파일이 수정된 날짜를 사용하는 대신 파일 이름에 날짜를 사용하는 방법이 있습니까?
답변1
답변은 20131125 대신 2013-11-25로 수정되었습니다.
호환 가능한 셸을 사용하여 스크립트를 bash
실행하는 경우 가장 간단한 해결책은 교체하는 것입니다.
d=$(date -r "$x" +%Y-%m-%d)
그리고
d="${x:4:4}-${x:8:2}-${x:10:2}"
expr을 사용한 휴대용 솔루션:
d=$(expr substr "$x" 5 4)-$(expr substr "$x" 9 2)-$(expr substr "$x" 11 2)
디렉토리 이름으로 2013-11-25 대신 20131125가 필요한 경우 다음을 수행할 수도 있습니다.
sed 솔루션:
d=$(echo "$x" | sed 's/.*_\([0-9]*\)_.*/\1/')
이 sed
명령은 파일 이름을 밑줄(=날짜) 사이의 숫자로 바꿉니다.
awk를 사용한 솔루션:
d=$(echo "$x" | awk -F _ '{print $2}')
컷이 있는 솔루션:
d=$(echo "$x" | cut -d_ -f 2')
답변2
당신은 그것을 사용할 수 있습니다 :
export LC_ALL=C
for x in *.JPG; do
d=$(date -d $( cut -d"_" -f2 <<< ${x} ) +%Y-%m-%d )
mkdir -p "$d"
mv -- "$x" "$d/"
done