Podczas przesyłania do witryny ftp data utworzenia oryginalnego pliku wydaje się być utracona, a zamiast tego otrzymuję datę przesłania. Jednak dane Exif w pliku są poprawne. Czy istnieje narzędzie do wsadowej zmiany daty utworzenia od daty Exif?
Podczas przesyłania do witryny ftp data utworzenia oryginalnego pliku wydaje się być utracona, a zamiast tego otrzymuję datę przesłania. Jednak dane Exif w pliku są poprawne. Czy istnieje narzędzie do wsadowej zmiany daty utworzenia od daty Exif?
Odpowiedzi:
Narzędzie obsługi EXIF exiv2
ma wbudowaną opcję:
exiv2 -T rename image.jpg
ustawia czas ostatniej modyfikacji pliku mtime
, na datę zapisaną w metadanych EXIF.
Poprosiłeś o wykorzystanie czasu tworzenia - ale nie jest to używane w systemach uniksopodobnych - i istnieją ku temu dobre powody: /unix/27297/why-doesnt-nix-keep-track Czas tworzenia pliku
Jestem prawie pewien, że czas, w którym dzwonisz, tworzy czas mtime
- nie ma problemu.
Od man exiv2
:
NAME
exiv2 - Image metadata manipulation tool
SYNOPSIS
exiv2 [options] [action] file ...
DESCRIPTION
exiv2 is a program to read and write Exif, IPTC and XMP image metadata and image com‐
ments. The following image formats are supported:
[ ... ]
mv | rename
Rename files and/or set file timestamps according to the Exif create time‐
stamp. Uses the value of tag Exif.Photo.DateTimeOriginal or, if not
present, Exif.Image.DateTime to determine the timestamp. The filename for‐
mat can be set with -r fmt, timestamp options are -t and -T.
[ ... ]
-T Only set the file timestamp according to the Exif create timestamp, do not
rename the file (overrides -k). This option is only used with the 'rename'
action. Note: On Windows you may have to set the TZ environment variable for
this option to work correctly.
Zobacz opcję -t
przeciwną.
-t
robi. W rzeczywistości wydaje się, że robi to nadzbiór tego, co -T
robi.
Jeśli zainstalujesz exiftool z CPAN, możesz uruchomić następujący skrypt, zakładając, że wszystkie twoje pliki znajdują się w katalogu o nazwie „wszystkie”
#!/bin/sh
for i in all/*; do
SPEC=`exiftool -t -s -d "%Y-%m-%d %H:%M:%S" -CreateDate "$i"`
read X DATE <<<${SPEC}
echo "$i:$DATE"
touch -d "$DATE" "$i"
done
exiftool
Zakładając, jak wspomniał „Volker Siegel”, że prawdopodobnie masz na myśli mtime, po prostu użyłbym wbudowanej funkcji exiftools.
lubić:
$ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg
spowoduje to pobranie informacji „DateFime” DateTimeOriginal z pola „exif” i użycie jej do ustawienia informacji o dacie / godzinie zmodyfikowanych przez system plików pliku „test.jpg”.
$ ls -la test.jpg
-rw-r-----@ 1 user 18329968 2432451 14 Out 17:57 test.jpg
$ exiftool -DateTimeOriginal test.jpg
Date/Time Original : 2015:10:09 13:29:58
$ exiftool "-DateTimeOriginal>FileModifyDate" test.jpg
1 image files updated
$ ls -la test.jpg
-rw-r-----@ 1 user 18329968 2432451 9 Out 13:29 test.jpg
Można to również zrobić za pomocą jhead
polecenia:
$ jhead -ft file.jpg
-dsft
. -ft
robi coś przeciwnego.
ExifTool może odczytywać i przetwarzać większość informacji EXIF, w tym wyodrębniać oryginał / datę lub tworzyć dane EXIF. Możesz użyć tych informacji, aby zmienić nazwę plików lub zmienić ich sygnatury czasowe. Na przykład:
find -name '*.jpg' | while read PIC; do
DATE=$(exiftool -p '$DateTimeOriginal' $PIC |
sed 's/[: ]//g')
touch -t $(echo $DATE | sed 's/\(..$\)/\.\1/') $PIC
done
Znajduje to wszystkie pliki JPG w bieżącym katalogu i aktualizuje znaczniki czasu.
Jeśli chcesz również nadać tym plikom nazwę na podstawie tej daty (to może się przydać), dodaj także mv -i $PIC $(dirname $PIC)/$DATE.jpg
przed done
wierszem.