이미지와 비디오의 이름을 바꾸고 날짜를 수정하는 스크립트를 만드는 방법은 무엇입니까?

이미지와 비디오의 이름을 바꾸고 날짜를 수정하는 스크립트를 만드는 방법은 무엇입니까?

원하지 않는 형식으로 이름이 지정된 이미지와 비디오가 포함된 갤러리 폴더가 있습니다. 해당 디렉토리의 모든 파일을 검색하고 이미지나 비디오를 찾으면 "IMG_20190117_200445.jpg" Year,Month,Day_Hour,Minute,Second.Extension 형식으로 이름을 바꾸는 스크립트를 만들고 싶습니다. 비디오 확장 프로그램이 추가되었습니다. 어떻게 해야 하나요? 미리 감사드립니다.

답변1

다음은 귀하가 요청한 작업을 수행할 것으로 생각되는 스크립트입니다.

먼저 확장자와 유형("IMG" 또는 "VID")을 사용하여 find해당 확장자를 가진 모든 일반 파일을 가져오고, 이를 반복하고, stat수정 시간을 결정하고, date새 파일 이름을 결정하고, 이름을 바꾸는 함수를 정의합니다.

스크립트는 먼저 다양한 이미지 확장에 기능을 적용한 다음 다양한 비디오 확장에 적용합니다.

#!/bin/bash

# a function to rename all files with a given extension
# takes two arguments: the extension, plus either "IMG" or "VID"
rename_ext() {
    # read the arguments to the function
    local ext="$1"
    local ftype="$2"
    # loop over all files with that extension
    while IFS= read -r -d '' filename ; do
        # read the (sub)directory name
        dirname="$(dirname "$filename")"
        # find the modification time
        modifytime="$(stat -c '%Y' "$filename")"
        # determine the new name
        local formatted="$(date +'%Y%m%d_%H%M%S' -d @$modifytime)"
        local newname="${ftype}_${formatted}.${ext}"
        # rename the file (and report that we are doing it)
        echo renaming "$filename" to "$dirname/$newname"
        mv -n "$filename" "$dirname/$newname"
    done < <(find -iname "*.$ext" -type f -print0)
}

# run the function on various image extensions
for ext in apng avif bmp gif jpeg jpg png tif webp ; do
    rename_ext "$ext" "IMG"
done

# run the function on various video extensions
for ext in avchd avif avi flv m2ts m4v mkv mov mp4 mpeg mpg mpv mts ogv qt vob webm wmv ; do
    rename_ext "$ext" "VID"
done

한 번 시도해 보고 mv해당 줄을 주석 처리하여 예상한 대로 작동하는지 확인할 수 있습니다.

파일 수정 시간 대신 EXIF ​​메타데이터를 사용하는 것을 고려할 수도 있지만 이는 좀 더 복잡합니다.

관련 정보