Jak sortować obrazy do folderów na podstawie rozdzielczości?

9

Tło: Mam folder pełen zapisanych zdjęć pulpitu. Chciałbym umieścić je w folderach, w zależności od ich rozdzielczości - 1024 x 768, itp. Tworzenie folderów w locie to bonus. Obecnie wszystkie obrazy znajdują się w folderze, ale niektóre z nich znajdują się w podfolderach. Mogę scalić je ręcznie, jeśli to ułatwi sprawę.

Wolałbym terminal, choć wciąż jestem nowicjuszem. Naprawdę wcale nie jestem programistą.

Korzystam z systemu Mac OS X, ale nie jestem przeciwny instalowaniu dodatkowych aplikacji, aby to osiągnąć (MacPorts?), Ani nawet korzystaniu z innego systemu operacyjnego (mam teraz konfigurację systemu Windows XP, Windows Vista i Ubuntu 9 w VMWare ).

Każda pomoc będzie mile widziana! Dziękuję Ci!

zapalny
źródło

Odpowiedzi:

11

Wiem, że to ponad rok (przepraszam za to), ale myślę, że ktoś może potrzebować pełnego działającego skryptu, więc oto jest. Biorąc pomysły tutaj i kompilując w skrypt, który otrzymujemy.

#!/bin/bash

for image in *.jpg;
    do res=$(identify -format %wx%h\\n $image);
    mkdir -p $res;
    mv $image $res;
done
zatatlan
źródło
4

Poważnie, dziękuję za odpowiedź wszystkim! Wróciłem do tego, bardziej doświadczony, i większość komentarzy tutaj ma teraz większy sens.

Lekko poprawiłem skrypt @ zatatlan, aby uwzględnić spacje w nazwach plików i dodać więcej rozszerzeń plików.

#!/bin/bash

shopt -s nullglob # The script spits errors if this is not set and there are, say, no *.png files.
for image in *.jpg *.JPG *.jpeg *.JPEG *.gif *.GIF *.bmp *.BMP *.png *.PNG;
    do res=$(identify -format %wx%h\\n "$image");
    mkdir -p $res;
    mv "$image" $res;
done
zapalny
źródło
3

Możliwe jest użycie imagemagick do wykrycia rozdzielczości obrazu . Owiń go w pętlę i gotowe. Nie będę czekał, aż wrócę do domu do bash shell, więc oto coś z mojej głowy. Składnia jest prawdopodobnie nieprawidłowa, ale może dać ci pewne wskazówki.

for image in $(`*.jpg`) do
   res=`identify $image | grep -o 'Resolution:'`
   if [ ! -d $res ]; then
     mkdir $res
   fi

   mv $image $res
done

Skrypt tworzy katalogi w locie. Zarówno bash, jak i imagemagick są dostępne dla komputerów Mac.

użytkownik4126
źródło
Możesz uczynić skrypt nieco krótszym i prostszym, zastępując ifblok prostym mkdir -p $res.
Ryan C. Thompson
2

Istnieje Amok EXIF ​​Sorter

AmoK Exif Sorter może zmieniać nazwy zdjęć oraz przenosić je lub kopiować do dowolnych folderów.
Foldery można nazwać zgodnie z danymi exif.

Oferuje podgląd na żywo nazw plików, zintegrowaną przeglądarkę zdjęć i danych exif, przeciąganie i upuszczanie, widok miniatur, automatyczne sprawdzanie aktualizacji oraz profile dla różnych kamer i użytkowników.

Obsługuje również pliki wideo według daty utworzenia, pliki w formacie IPTC.

Napisane w JAVA , działa na wszystkich platformach obsługujących JRE5.
Sprawdź listę funkcji w linku.

Nie zniechęcaj się językiem niemieckim.
Rozwiń Sprachei wybierz Englisch, uruchom ponownie aplikację.

nik
źródło
1

Polecenie identyfikacji ImageMagick może podać szerokość i wysokość w pikselach, np

~$ identify -format %w_%h\\n *jpg 
2868_3429
1056_960

Możesz umieścić to w skrypcie bash jako część pętli for i, dla bezpieczeństwa, skopiować pliki do katalogu o tej samej nazwie co rozdzielczość (sprawdź, czy istnieje i utwórz, jeśli nie).

mas
źródło
0

Podstawowym sposobem, który zapewni przybliżoną rozdzielczość, jest uporządkowanie według rozmiaru pliku. Jest to coś, co powinno być wbudowane w każdy system operacyjny, więc nie potrzebujesz niczego specjalnego. WIELKIM problemem jest to, że format twoich zdjęć musiałby być taki sam, aby to działało. To nie jest idealne rozwiązanie, ale może być łatwym zatrzymaniem, dopóki nie znajdziesz czegoś, co faktycznie pasuje do rachunku.

DHayes
źródło