ubuntuusers.de

Viele Bilder automatisiert verschieben - Bash

Status: Ungelöst | Ubuntu-Version: Xubuntu 14.04 (Trusty Tahr)
Antworten |

Arkved

Anmeldungsdatum:
14. Oktober 2013

Beiträge: 13

Hallo,

leider habe ich bisher nichts passendes gefunden. Ähnliches ja, konnte leider damit nichts anfangen..

Ich versuche ein Bash Script zu schreiben und hoffe ihr könnt mir dabei helfen.

Ich habe einen Ordner mit 1,8 Millionen Bilddateien, da mein Computer diesen Ordner auf Grund der Menge einfach nicht laden möchte, würde ich diese 1,8 Millionen Bilder gerne in Ordner aufteilen. D.h. Das Script soll automatisiert Ordner anlegen, und z.B. in jeden Ordner 1000 Bilder verschieben, bis alle Bilddateien jeweils in Ordnern sind, wo sich 1000 Bilder darin befinden. Eine Liste mit jeglichen Dateinamen habe ich bereits angelegt, bitte um Hilfe.

MfG

Thomas_Do Team-Icon

Moderator
Avatar von Thomas_Do

Anmeldungsdatum:
24. November 2009

Beiträge: 8808

Arkved schrieb:

... da mein Computer diesen Ordner auf Grund der Menge einfach nicht laden möchte

Mit welchem Programm möchtest Du was "laden"? Geht es um den Dateimanager Nautilus? Evtl. mal versuchen die Vorschau zu deaktivieren.

Ansonsten, nach welchem Ordnungsprinzip sollen die Bilder in die neuen Ordner verschoben werden?

Arkved

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2013

Beiträge: 13

Also es geht darum, dass Thunar den Ordnerinhalt nicht lädt. Ich möchte eigentlich nach keinem Prinzip sortieren, nur nach Anzahl, wobei es hilfreich wäre eventuell z.B. Grafiken kleiner als z.B. 640 Pixel breite zu löschen...

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17621

Wohnort: Berlin

Sind die Bilder nummeriert, wie oftmals, wenn sie von einer Digicam kommen, Cimg07394.jpg usw? Dann kann man mit arithmetischen Operationen leicht operieren.

Sind sie alle unterschiedlich bennannt (Apfel, Banane, Clementine...) dann kann man gut nach dem Anfangsbuchstaben aufteilen.

Haben sie das orignal Erzeugungsdatum, dann kann man sie gut nach Alter in Ordner verschieben (2013-07).

Haben sie das nicht, aber man kommt über die Exif-Information an das Datum, dann geht es auch, nur langsamer und aufwendiger.

Nach Größe zu sortieren ist sicher eine reichlich sinnlose Idee, aber der Vollständigkeit halber ...

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Wenn es JPEG Fotos von einer Digitalkamera wären könnte exiftool diese für dich in Unterordner nach Datum schieben (oder auch sonst jeglichen EXIF-Daten als Kriterium, z.B. Kameratyp um deine Bilder von denen deiner Freundin zu trennen).

Ansonsten selber basteln... unsortiert vielleicht so

printf "%s\0" *.jpg | xargs -0 -n 1000 ./deinscript.sh
#!/bin/bash
target="$RANDOM"_"$RANDOM"_"$RANDOM"
mkdir "$target"
mv -t "$target"/ "$@"

ungetestet, sollte jeweils bis zu 1000 Dateien in Unterordner schieben...

wenn du * statt *.jpg nimmst dann darf deinscript.sh nicht im gleichen Verzeichnis liegen sonst landet es auch in so einem Unterordner...

Arkved

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2013

Beiträge: 13

frostschutz schrieb:

printf "%s\0" *.jpg | xargs -0 -n 1000 ./deinscript.sh
#!/bin/bash
target="$RANDOM"_"$RANDOM"_"$RANDOM"
mkdir "$target"
mv -t "$target"/ "$@"

Wenn ich das Script erstelle, natürlich auch chmod +x auf das Script anwende, und den Teil mit printf eingebe, kommt leider folgende Ausgabe: xargs: "./deinscript.sh: Keine Berechtigung", auch wenn ich als Root ausführe... Es handelt sich bei den Bildern um wiederhergestellte Dateien mittels foremost, d.h. wahllos unterschiedliche Bildnamen und Metadaten..

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Arkved schrieb:

... kommt leider folgende Ausgabe: xargs: "./deinscript.sh: Keine Berechtigung", auch wenn ich als Root ausführe...

Jou, der Klassiker... → Du musst dein Skript natürlich erst ausführbar machen ! - oder steht das womöglich in einem Dateisystem ohne Rechteverwaltung ? (FAT oder so)

Es handelt sich bei den Bildern um wiederhergestellte Dateien mittels foremost, d.h. wahllos unterschiedliche Bildnamen und Metadaten..

Dann sollten die Metadaten ja stimmen, denn die stehen ja innerhalb der Bilddatei. Also vielleicht gerade ein Fall für exiftool ?

LG,

track

Arkved

(Themenstarter)

Anmeldungsdatum:
14. Oktober 2013

Beiträge: 13

Hallo nochmal, danke für die hilfreichen Antworten.

Im Endeffekt konnte exiftool mir bislang recht gut helfen. Ich fertigte eine Liste aller Bildinformationen des gesamten Ordners an. Diese Liste benutzte ich um Bilder mit bestimmter Pixelgröße mittels Bash herauszufiltern.

Nun lasse ich folgendes Script nochmals durchlaufen:

1
2
3
4
5
6
7
8
for i in *.jpg *.png; do
	SZ=$(identify -format "%w %h" "$i")
	WID=${SZ% *}
	HEI=${SZ#* }	
	if [ $WID -lt 680 ]; then
		rm -rf $i SMALL/
	fi
done

Dieses Script soll alle Bilder weniger breit als 680 Pixel löschen. Funktioniert an sich gut, leider sind unter den vielen Bildern sehr viele beschädigte Dateien, welche via exiftool alle Werte normal anzeigen, aber sich nicht mehr öffnen lassen. D.h. mittels exiftool kann ich nicht feststellen ob ein Bild "kaputt" ist. Das Script löscht kaputte Bilder nicht, hat jemand eine Idee, wie ich kaputte Bilder suchen und löschen kann?

Danke

frostschutz

Avatar von frostschutz

Anmeldungsdatum:
18. November 2010

Beiträge: 7790

Vielleicht durch den Rückgabewert (errorcode) eines Programms das mit dem Bild arbeitet.

convert "$bild" -scale 1x1 ergebnis.gif && echo "$bild" ok || echo "$bild" futsch

Unter der Annahme daß das Bild so kaputt ist daß convert dabei aussteigt. Für rein optische Mängel bleibt nur händisch aussortieren.

convert ist nur urlangsam, vielleicht gibts da was besseres.

Antworten |