하위 디렉터리를 만들고 날짜별로 파일을 정리하세요.

하위 디렉터리를 만들고 날짜별로 파일을 정리하세요.

보안 카메라에서 복사한 파일 디렉터리가 있는데 파일 날짜별로 하위 디렉터리로 구성하고 싶습니다. 예를 들어;

-rwxrwxrwx 0 root root 4935241 Jul 19  2012 DSCN1406.JPG
-rwxrwxrwx 0 root root 4232069 Jul 19  2012 DSCN1407.JPG
-rwxrwxrwx 0 root root 5015956 Jul 20  2012 DSCN1408.JPG
-rwxrwxrwx 0 root root 5254877 Jul 21  2012 DSCN1409.JPG

해당 디렉터리의 파일을 살펴보고 다음 이름으로 3개의 필수 디렉터리를 생성하기 위해 실행되는 스크립트를 원합니다.

drwxrwxrwx 1 root root     0 Sep  2 16:49 07-19-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-20-2012
drwxrwxrwx 1 root root     0 Sep  2 16:49 07-21-2012

그런 다음 파일을 적절한 디렉터리로 이동합니다. 이를 달성하기 위한 좋은 스크립트 방법에 대한 제안이 있는 사람이 있습니까?

답변1

Linux 및 Cygwin에서는 date -r.

for x in *.JPG; do
  d=$(date -r "$x" +%Y-%m-%d)
  mkdir -p "$d"
  mv -- "$x" "$d/"
done

(저는 명확하고 표준이며 정렬하기 쉬운 YYYY-MM-DD 날짜 형식을 사용합니다.)

답변2

정리할 객체가 파일인지도 확인합니다. 이는 중요한 확인 사항입니다. 실패할 경우 해당 날짜의 디렉토리 자체가 다른 날짜로 이동될 수 있습니다. 실제로 이는 답변을 더욱 멱등하게 만들어 여러 번 실행할 수 있게 합니다.

dir="mention the directory path"
cd "$dir"

for x in *; do
    if [ -f "$x" ]; then
        d=$(date -r "$x" +%Y/%B/%d)
        mkdir -pv "$d"
        mv -v -- "$x" "$d/"
    fi
done

관련 정보