여러 이미지와 비디오가 포함된 갤러리 폴더가 있는데 그 중 일부는 수정 날짜가 정확하고 일부는 월이 잘못되었습니다. 특정 폴더의 모든 파일을 변경하고 월을 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" \;