[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