Autor Wątek: [SOLVED]Skrypt sortujący zdjęcia do folderów według daty wykonania  (Przeczytany 3983 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

GarryMoveOut

  • SUSE User
  • *
  • Wiadomości: 89
  • Leap 42.3 KDE
      • http://zrob-to-sam.cba.pl
[SOLVED]Skrypt sortujący zdjęcia do folderów według daty wykonania
« dnia: Październik 06, 2017, 12:40:08 pm »
Witam, mam spory zbiór zdjęć z różnych aparatów, około 1000. Muszę je posegregować według daty wykonania zdjęcia (wystarczy sam rok), większość z nich ma informacje w exif o dacie wykonania (Create Date). Nie wiem za bardzo jak to napisać skryptowo. W jednym folderze mam wszystkie tysiąc zdjęć. Po odpaleniu skrypt powinien sprawdzić każde zdjęcie i jeśli ma zapisane informacje o dacie utworzenia powinien przenieść je odpowiednio do folderu np 2017 a jeśli nie ma takiego folderu to żeby utworzył taki folder i przeniósł zdjęcie.
#!/bin/bash
for nazwazdj in *.jpg
do
rok=$(exiftool $nazwazdj | grep "Create Date")
mv $nazwazdj/$rok
done
Problem mam z tym że grep zwraca całą linijkę i nie wiem jak wydobyć same np 2017 a drugi to że mv nie przeniesie pliku bo nie ma takiego katalogu. No i jeszcze może być wyjątek że zdjęcie nie będzie miała takiej informacji jak create date. Proszę o podpowiedź. Dziękuję.
« Ostatnia zmiana: Październik 06, 2017, 06:50:39 pm wysłana przez GarryMoveOut »

Fisiu

  • Geeko's friend
  • Maniak SUSE
  • *
  • Wiadomości: 4632
      • la manzana
Odp: Skrypt sortujący zdjęcia do folderów według daty wykonania
« Odpowiedź #1 dnia: Październik 06, 2017, 04:45:11 pm »
Np: | grep "Create Date" | head -1 | cut -f2 -d ":" | cut -f2 -d " "Wynik możesz wrzucić do zmiennej. Dalej sprawdzasz czy katalog istnieje, jak trzeba to go tworzysz. I dopiero teraz uruchamiasz `mv`.

GarryMoveOut

  • SUSE User
  • *
  • Wiadomości: 89
  • Leap 42.3 KDE
      • http://zrob-to-sam.cba.pl
Odp: Skrypt sortujący zdjęcia do folderów według daty wykonania
« Odpowiedź #2 dnia: Październik 06, 2017, 06:10:21 pm »
EDIT
Dzięki za wskazówkę. Końcowa wersja skryptu. Problem jest tylko taki że niektóre zdjęcia kończą się na JPG a niektóre na jpg i musiałem 2 razy odpalić.
#!/bin/bash
for filename in *.JPG
do
    data=$(exiftool "$filename" | grep "Create Date" | head -1 | cut -f2 -d ":" | cut -f2 -d " ")
   
    if [[ -z "${data// }" ]]; then
       echo "$filename"
    else
        if [[ ! -d "$data" ]]; then
            mkdir -v $data
        fi
            mv -v "$filename" "$data/$filename"
    fi
done
« Ostatnia zmiana: Październik 06, 2017, 06:50:06 pm wysłana przez GarryMoveOut »

Fisiu

  • Geeko's friend
  • Maniak SUSE
  • *
  • Wiadomości: 4632
      • la manzana
Odp: [SOLVED]Skrypt sortujący zdjęcia do folderów według daty wykonania
« Odpowiedź #3 dnia: Październik 06, 2017, 09:19:14 pm »
Jeśli chcesz obsłużyć oba warianty nazewnictwa plików, to możesz użyć np.:
for filename in *.{JPG,jpg}

mastal

  • Moderator działu
  • SUSE Root
  • *
  • Wiadomości: 1926
Odp: [SOLVED]Skrypt sortujący zdjęcia do folderów według daty wykonania
« Odpowiedź #4 dnia: Październik 08, 2017, 09:07:28 am »
Jeśli chcesz obsłużyć oba warianty nazewnictwa plików, to możesz użyć np.:
for filename in *.{JPG,jpg}
albo
for filename in *.[jJ][pP][gG]
1. Zapoznaj się ze stroną http://www.linux-tips-and-tricks.de/quickstart#English i wykonaj tam zawarte punkty
2. Przyślij wynik skryptu collectNWData.sh