여러 파일의 수정 날짜(메타데이터)를 변경하는 방법은 무엇입니까?

여러 파일의 수정 날짜(메타데이터)를 변경하는 방법은 무엇입니까?

여러 이미지와 비디오가 포함된 갤러리 폴더가 있는데 그 중 일부는 수정 날짜가 정확하고 일부는 월이 잘못되었습니다. 특정 폴더의 모든 파일을 변경하고 월을 1월에서 6월(또는 기타 유사한 조합)로 수정하는 스크립트를 만들고 싶습니다. 예:

내 이미지 날짜는 다음과 같습니다(이름이 아닌 EXIF ​​메타데이터).

05-Jan-2011
06-Jan-2011
07-Jan-2011

등...

연도와 날짜를 동일하게 유지하고 모든 달을 1월 대신 6월로 변경하고 싶습니다.

따라서 이름 대신 EXIF ​​메타데이터가 됩니다.

05-Jun-2011
06-Jun-2011
07-Jun-2011

등....

어떻게 해야 하나요?

미리 감사드립니다.

답변1

업데이트: 내 답변이 잘못된 경우 즉시 알려주시기 바랍니다.

file system's modification date메타데이터가 메타데이터와 동일한지 잘 모르겠습니다 exitf modification date. 테스트를 했는데 exiftool날짜가 동일하므로 이를 사용하여 해당 메타데이터를 조작할 수 있을 것 같습니다 touch.

해결책:

먼저 다음 명령을 사용하여 파일의 수정 날짜를 가져와야 합니다 stat.

filedate=$(stat -c '%y' "/path/to/file" | cut -d' ' -f1)

이제 해당 달은 다른 달로 대체됩니다. 이를 위해 awk를 사용할 수 있습니다.

newDate=$(awk -v month="Jun" -F '-' '{print $1"-"month"-"$3}' <<< $filedate )

다음 명령을 사용하여 touch수정 날짜를 변경할 수 있습니다 .

touch -m -d $newDate /path/to/file
#-m argument is used to change modification time
#-d is used to specify the new date

마지막으로, 파일을 재귀적으로 변경하려면 find스크립트 파일에 있는 이전에 제공된 코드를 사용할 수 있습니다.

스크립트.sh:

#! /usr/bin/env bash

filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)

newMonth="Dec" #here you specify the month 
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )

touch -m -d $newDate $1

다음을 find사용할 수 있습니다.

find /path/to/your_directory -type f -exec ./script.sh {} \;

find 명령에서 월을 지정하려면 이를 script.sh에 인수로 전달할 수 있습니다.

이제 코드는 다음과 같습니다.

스크립트 파일

#! /usr/bin/env bash

filedate=$(stat -c '%y' "$1" | cut -d' ' -f1)

newMonth="$2"
newDate=$(awk -v month=$newMonth -F '-' '{print $3"-"month"-"$1}' <<< $filedate )

touch -m -d $newDate $1

찾기 명령

find . -type f -exec ./script {} "Nov" \;

관련 정보