[linux-l] Eure Erfahrungen mit digitalen Foto-Alben?
Volker Grabsch
vog at notjusthosting.com
So Apr 23 00:02:00 CEST 2006
On Fri, Apr 21, 2006 at 07:48:37PM +0200, Olaf Radicke wrote:
> Der nächste Schritt währe aus dem Ergebnis ein tmp-Verzeichnis mit Soft-Links
> auf die jeweiligen Dateien zu generieren. Dann bräuchte man das Verzeichnis
> nur noch mit dem Bild-Browser (z.B. GQview) seiner Wahl zu öffnen und danach
> wieder zu löschen.
>
> Ich vermute mal das automatisch erstellen der Links sind 10 Zeilen Bash-Code.
> Hat einer Lust so was mal eben aus dem Ärmel zu schütteln? Ansonsten werde
> ich das mal mit Python coden...
Lass Python. Ich liebe Python, aber wenn ein Shell- oder sed-Script
ausreicht, nehme ich lieber das. Jedes Tool für seinen Zweck.
Variante 1: xargs
=================
Es sind übrigens nur 3 Befehle: find, xargs, "ln -s"
Grobes Schema:
find ... | xargs -- ln -s --target-directory=...
Also eigentlich ein Einzeiler, aber der Übersichtlichkeit halber breche
ich das mal auf 3 Zeilen herunter:
find ~/my-pictures-dir -name '*Peter*' -print0 | \
xargs -0 -L 100 -- \
ln -s --target-directory=~/my-temp-dir/
Es ist so ähnlich auch in den find- und xargs-Manpages beschrieben.
Das "-print0" dient zur sicheren Parameter-Übergabe, 000-separiert statt
durch Zeilenenden. Die "-0" sorgt dafür, dass xargs darüber auch bescheid
weiß. Das ganze ist nötig, weil es sonst Probleme gäbe mit Dateien, die
Leerzeichen im Namen haben.
Das "--target-directory=" ist nötig, weil man es nicht als letzten
Parameter angeben kann, schließlich hängt xargs die ganzen Dateinamen
noch als Parameter an.
Das "-L 100" sorgt dafür, dass nicht ein einziger "ln -s" läuft, der
vielleicht zu viele Parameter bekommt. Stattdessen wird für blockweise
für jeweils 100 Dateien ein "ln -s" ausgeführt.
Variante 2: find --exec
=======================
Mit "find ... --exec ..." kann man den xargs-Zwischenschritt weglassen:
find /home/play/ar/nude/ -name '*Peter*' -exec \
ln -s '{}' test/ ';'
Also ein Zweizeiler. Aber dann wird für jede Datei ein extra "ln -s"
aufgerufen, während bei der ersten Variante immer 100 Links auf einmal
erstellt werden.
10 Zeilen?
==========
So, wir haben also 2-3 Zeilen. Wenn das ein Shellscript mit mehreren
Parametern sein soll, die noch überprüft werden müssen, und bei
fehlerhaften Parametern eine "usage:" Zeile ausgegeben werden soll,
kann man es vielleicht auf 5 Zeilen aufblähen. Und noch die #!-Zeile.
Und noch ein paar Leerzeilen dazwischen, und für jeden Parameter eine
Shell-Variable, dann hast du deine 10 Zeilen. ;-)
Viele Grüße,
Volker
--
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR
Mehr Informationen über die Mailingliste linux-l