하위 디렉터리를 만들고 파일 이름을 기준으로 날짜별로 파일을 구성합니다.

하위 디렉터리를 만들고 파일 이름을 기준으로 날짜별로 파일을 구성합니다.

나는 다음 스크립트를 사용하여 사진을 "날짜" 디렉터리로 정리했습니다.

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

관련 정보