손실 된 파티션에서 이미지를 복구했으며 각 이미지의 EXIF 데이터에서 생성 날짜별로 정렬하거나 폴더에 저장해야합니다.
digiKam과 shotwell을 설치했지만 옵션 에서이 작업을 수행하는 방법을 찾지 못했습니다.
누구든지 그 프로그램 중 하나 또는 다른 방법으로 어떻게하는지 설명 할 수 있습니까?
손실 된 파티션에서 이미지를 복구했으며 각 이미지의 EXIF 데이터에서 생성 날짜별로 정렬하거나 폴더에 저장해야합니다.
digiKam과 shotwell을 설치했지만 옵션 에서이 작업을 수행하는 방법을 찾지 못했습니다.
누구든지 그 프로그램 중 하나 또는 다른 방법으로 어떻게하는지 설명 할 수 있습니까?
답변:
내가 가장 좋아하는 해결책은 파일 날짜를 exif 사진 날짜와 동일하게 설정하는 것입니다. 이렇게하면 파일 탐색기 도구를 사용하여 파일을 정렬 할 수 있습니다.
apt-get install jhead
)jhead -ft *
. 파일 시스템에 파일 날짜를 설정하여 exif 메타 데이터의 작성 날짜를 설정합니다.exiftool을 사용하는 것이 좋습니다 . 당신은 그것을 설치할 수 있습니다
sudo apt install exiftool
다음은 생성 날짜를 기준으로 YYYYMMDD 형식의 파일 이름을 바꾸고 끝에 시퀀스 번호를 추가하는 샘플 명령입니다.
exiftool '-filename<CreateDate' -d %Y%m%d%%-.4nc.%%le -r
다음 image.jpg
은 'YYYY-MM-DD'형식으로 작성 날짜를 이름으로하여 디렉토리로 이동하는 샘플 명령입니다 .
exiftool -d %Y-%m-%d "-directory<datetimeoriginal" image.jpg
설명서에는 샘플 명령이 더 있습니다. https://sno.phy.queensu.ca/~phil/exiftool/filename.html
cd /home/me/Pictures/staging
먼저 수행 한 다음 exiftool을 호출하십시오.
훌륭한 도구는 빠른 사진 다운로더입니다
PPA 추가
sudo apt-add-repository ppa:dlynch3/ppa
업데이트 및 설치
sudo apt-get update
sudo apt-get install rapid-photo-downloader
"손실 된 파티션"을 입력 소스로 사용하고 Rapid Photo Downloader의 exif 데이터를 기반으로 대상 경로 / 파일 이름을 구성하십시오.
가장 간단한 사용법 :
jhead -n%Y/%m/%d/%Y%m%d%H%M /Destination/*.jpg
현재 디렉토리의 모든 JPG를 고유 한 파일 이름 /Year/Month/Day/YearMonthDayHourMinute.jpg로 멋진 디렉토리 구조로 정렬, 이동 및 이름 변경합니다.
RAW가 아닌 * .jpg 파일 반죽에서만 작동합니다.
jhead -n%Y/%m/%d/%Y-%m-%d--%H%M-- *.jpg
MP3 (ID3), PDF 및 더 많은 메타 데이터뿐만 아니라 EXIF 데이터를 추가하는 nautilus-columns 라는 확장이 있습니다 . 이 새로운 열은 정렬 소스로도 사용할 수 있습니다.
다음을 사용하여 설치 :
sudo add-apt-repository ppa:atarea/nautilus-extensions
sudo apt update
sudo apt install nautilus-columns
이것은 내가 사용하는 코드입니다. YYYYMMDD_originalname.jpg를 추가하여 사진의 이름을 바꿉니다.
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
# ignore jpg that have 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# get the date and time from the tag
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
echo "file_$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# check if DateTimeOriginal was present
if [[ "$PIC" == "$DATEMOD2$PIC" ]];then
# as DateTimeOriginal is not present try with HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
# check if HistoryWhen is present
if [[ "$PIC" == "$DATEMOD2B$PIC" ]];then
# nor the tag DateTimeOriginal, nor HistoryWhen present
echo "skip"
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2B""$PIC"
fi
else
# this will be done
echo "mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC""
#uncomment if you like it
#mv -i "$PIC" $(dirname "$PIC")/"$DATEMOD2""$PIC"
fi
fi
fi
done
편집하다. 이 수정에서 태그의 날짜는 이름과 터치로 날짜 속성으로 전달됩니다. 또한 해당 태그가 존재하지 않으면 수정 날짜가 파일 이름으로 전달됩니다.
#! /bin/bash
shopt -s globstar || exit
for PIC in **
do
# look only for jpg
if [[ "$PIC" =~ \.JPG$ ]] || [[ "$PIC" =~ \.jpg$ ]]; then
echo "file_$PIC"
# get the date and time from the tag DateTimeOriginal
DATE=$(exiftool -p '$DateTimeOriginal' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if DateTimeOriginal is 0000... OR empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "datetimeoriginal_$LONGDATE"
# modify the attribute date with the info in the tag date
touch -t $LONGDATE "$PIC"
# customize date, in this case eliminate the time, getting only the date in 8 numbers and adding _
DATEMOD2=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2_$DATEMOD2"
# skip renaming if
# 8 numbers at beginning followed by _ or after IMG_ or P_ and followed by _ (already date stamped)
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2$filename"
fi
else
# get the date and time from the tag HistoryWhen
DATE=$(exiftool -p '$HistoryWhen' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if Historywhen is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
echo "historywhentag_$LONGDATE"
touch -t $LONGDATE "$PIC"
DATEMOD2B=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2B_$DATEMOD2B"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2B""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2B$filename"
fi
else
# get the date and time from the tag tag filemodifydate
DATE=$(exiftool -p '$filemodifydate' "$PIC" | sed 's/[: ]//g')
LONGDATE=$(echo $DATE | sed -e 's/^\(.\{12\}\).*/\1/')
# check if filemodifydate is 0000... or empty
if [[ "$LONGDATE" != "000000000000" ]] && [[ -n "$LONGDATE" ]]; then
#echo "filemodifydatetag_$LONGDATE"
#touch -t $LONGDATE "$PIC"
DATEMOD2C=$(echo $DATE | sed -e 's/^\(.\{8\}\).*/\1_/')
echo "datemod2C_$DATEMOD2C"
if [[ "$PIC" =~ [[:digit:]]{8}_.*$ ]] || [[ "$PIC" =~ IMG_[[:digit:]]{8}_.*$] ]] || [[ "$PIC" =~ P_[[:digit:]]{8}_.*$] ]]; then
:
else
# this will be done
filename=$(basename "$PIC")
echo "$filename"
echo "mv -i \""$PIC"\" \""$(dirname "$PIC")"/"$DATEMOD2C""$filename"\""
#uncomment if you like it
mv -i "$PIC" "$(dirname "$PIC")/$DATEMOD2C$filename"
fi
else
echo "Error, NO date available"
fi
fi
fi
fi
done
폴더 (연도 및 월) 정렬 (YYYYMM) :
exiftool "-Directory<DateTimeOriginal" -d "%Y%m" *