Powiedzmy, że mam kilka zdjęć, wszystkie z poprawnymi informacjami EXIF, a zdjęcia są losowo nazywane (z powodu mojego problemu). Mam mały program o nazwie, jhead
który daje mi następujące wyjście:
$ jhead IMG_9563.JPG
File name : IMG_9563.JPG
File size : 638908 bytes
File date : 2011:02:03 20:25:09
Camera make : Canon
Camera model : Canon PowerShot SX210 IS
Date/Time : 2011:02:03 20:20:24
Resolution : 1500 x 2000
Flash used : Yes (manual)
Focal length : 5.0mm (35mm equivalent: 29mm)
CCD width : 6.17mm
Exposure time: 0.0080 s (1/125)
Aperture : f/3.1
Focus dist. : 0.29m
ISO equiv. : 125
Exposure bias: -1.67
Whitebalance : Manual
Light Source : Daylight
Metering Mode: pattern
Exposure Mode: Manual
Teraz muszę zmienić nazwę wszystkich zdjęć w folderze w następnym formacie:
001.JPG
002.JPG
003.JPG
...
Gdzie mniejsza liczba będzie starszym obrazem, a maksymalna nowszym.
Nie jestem zbyt dobry w pisaniu skryptów, więc proszę o pomoc.
Myślę, że wystarczy skrypt bash, ale jeśli czujesz się bardziej komfortowo, możesz napisać skrypt w języku Python.
Pomyślałem w czymś takim jak:
$ mv IMG_9563.JPG `jhead IMG_9563.JPG | grep date`
ale nie wiem, jak to zrobić dla wszystkich plików jednocześnie.
ls *.JPG | wc > rename
to I musiałbym użyć zmiany nazwy skryptu na XXX.JPGwc
, zapomniałem tego, który zamówił po imieniu.Odpowiedzi:
Możesz to zrobić dla wszystkich plików za pomocą pętli for (w powłoce / w skrypcie powłoki):
To tylko bardzo podstawowy zarys. Usuń
echo
po sprawdzeniu, czy wszystko działa zgodnie z oczekiwaniami.źródło
File date : 2011:02:03 20:25:09
. Jak mogę filtrować tylko drugą kolumnę?j=`jhead "$i" | grep date | sed 's/.* //'`.jpg
zamiast?'
przed `` .jpg``Właśnie dowiedziałem się , że głupek może zrobić to wszystko za Ciebie! :)
źródło
%i
(lub%03i
konkretnie) poda numer porządkowy zgodnie z pierwotnym pytaniem. Łączenie obu może nie być złym pomysłem.Jeśli ktoś potrzebuje bardziej złożonej zmiany nazwy, na przykład w celu włączenia kluczowych wartości ekspozycji do nazwy pliku, oto mój mały skrypt. To zmienia nazwy plików JPEG na coś takiego:
NightSky_2014.08.27_22.30.05_NX20_F2.8_f20.0mm_20s_ISO800.jpg
.źródło
Podobał mi się kod opublikowany przez maxschlepzig, ale mimo to miałem problemy z wyjściem.
Problem polegał na spacji w wynikowej nazwie pliku (między ciągiem daty a ciągiem czasu). Choć jest banalny dla każdego, kto korzysta z GUI, sprawia, że obsługa plików w wierszu poleceń jest nieco trudniejsza.
Tutaj polecenie „sed” zostało zasadniczo zmienione na cztery oddzielne operacje „sed” na korzyść poprzedniego argumentu monolitycznego. Aby dopasować się do tego, poniżej zmienia również plik na normalne uprawnienia 644.
źródło
sed
całkiem dobrze, więc w zasadzie rozumiem, co próbujesz zrobić. Ale naszym celem w Stack Exchange nie jest rozdawanie kanapek z rybami ani pisanie tysięcy jednorazowych rozwiązań na trywialnie różne pytania; naszym celem jest nauczenie ludzi, jak łowić ryby (tj. nauczyć ludzi, w tym obecnego pytającego i przyszłych czytelników, jak rozwiązywać własne problemy). W tym celu Twoja odpowiedź byłaby lepsza, gdybyś wyjaśnił, co próbujesz. (Nie odpowiadaj w komentarzach; edytuj swoją odpowiedź, aby była jaśniejsza.)… (Ciąg dalszy)Ponieważ łatwiej jest sobie z tym poradzić (imho), napisałem sobie skrypt Ruby:
Co to robi?
Iteruje po wszystkich plikach przekazanych jako parametry (np
*.JPG
.).Sprawdziłem, czy poprawnie obsługuje pliki RAW i filmy. Powinien działać ze wszystkim, z czym
exiftool
można sobie poradzić.Nic nie robi, jeśli plik
exiftool
zgłasza błąd lubTo czyni go dość solidnym. W szczególności żadne pliki nie mogą zniknąć (po cichu), jak ma to miejsce w przypadku niektórych innych odpowiedzi.
źródło
exiv2
byłaby alternatywą dla manipulacji, która pozwala na bardzo prostą składnię:Więc zmieniłoby to nazwę wszystkich plików JPEG w bieżącym folderze:
Jeśli chcesz również dodać informacje geograficzne, możesz użyć
exivtool
:źródło
Podoba mi się rozwiązanie @ Kevin, ponieważ chciałem również zachować oryginalną nazwę (unikając problemu ze zdjęciami wykonanymi w tej samej sekundzie), oto moje rozwiązanie:
źródło
Pierwszy post przez początkującego ... Pierwszy skrypt bash ... Podobało mi się powyższe rozwiązanie Libor / HalosGhost, ponieważ zawierało więcej szczegółów w zmianie nazwy. Ale po przetestowaniu zduplikowane nazwy plików doprowadziłyby do utraty plików. Dodałem więc znacznik licznika na końcu nazwy pliku, aby ułatwić korzystanie z niego i zapobiegać kolizjom. Jestem pewien, że ktoś tutaj może to poprawić, ale pomyślał, że to może pomóc.
Przepraszam, że opublikowałem kod. Mam problemy z interfejsem, ale jeśli ktoś mógłby wskazać mi poprawny sposób robienia rzeczy, byłoby świetnie.
źródło