파일 날짜를 기준으로 (이미지) 파일을 다른 디렉터리로 이동하는 방법

파일 날짜를 기준으로 (이미지) 파일을 다른 디렉터리로 이동하는 방법

CentOS/cPanel 서버에 24000개의 이미지가 있는 디렉토리(currdir)가 있습니다.

날짜를 기준으로 이 디렉토리의 이미지를 다른 디렉토리(또는 currdir 내의 하위 디렉토리)로 이동하여 이 디렉토리를 분할하고 싶습니다.

달성하는 방법?

답변1

find그러면 마지막으로 변경된 시간을 기준으로 디렉터리의 파일을 이동하는 쉘 명령을 출력하는 명령이 실행됩니다 . 디렉터리에 대상을 동적으로 생성합니다( mkdir -p디렉토리가 이미 존재하는 경우 실패하지 않음). 생성된 명령은 쉘 인터프리터로 직접 파이프됩니다.

find . -maxdepth 1 -type f -printf "mkdir -p %CY/%Cm/%Cd && mv -- '%f' %CY/%Cm/%Cd\n" | sh

(GNU를 조건 find자로 가정 -printf).

마지막 수정 시간으로 대체됨(일반적으로 파일 수명을 보다 정확하게 나타냄 %C)%T콘텐츠파일의 메타데이터가 수정되면 변경 시간도 업데이트됩니다.

이는 디렉터리를 생성하고 파일을 이동하는 데 많은 프로세스를 생성하므로 가장 효율적인 방법이 아닐 수 있습니다. 이건 처형이니까 별로 집중하진 않겠습니다...

파일 이름에 '문자가 포함되어 있지 않다고 가정합니다(이것이 보장되지 않으면 명령 주입 취약점이 됩니다).

-x옵션 ( 또는 -o xtrace) 을 전달 sh하여 수행 중인 작업을 표시하거나 -e( 또는 -o errexit)를 전달하여 첫 번째 오류 시 종료되도록 할 수 있습니다(비록 을 사용하더라도 해당 항목을 교체 -e하고 싶거나 그렇지 않으면 실패가 무시됩니다).&&;mkdir

답변2

그리고 exiftool:

exiftool -ext jpg '-Directory<FileModifyDate' -d %Y/%m/%d .

현재 작업 디렉토리에 있는 확장자를 가진 파일 jpgFileModifyDate.

exiftool -args file.jpg사용할 수 있는 파일과 관련된 추가 타임스탬프가 표시됩니다 FileModifyDate(카메라가 JPEG 파일에 저장한 EXIF ​​​​메타데이터의 타임스탬프 포함)(예 FileInodeChangeDate: FileAccessDate, ModifyDate, DateTimeOriginal, ) CreateDate.

관련 정보