viele symbolische Links erstellen

UllaUffz

UllaUffz

Eroberer
viele symbolische Links erstellen [gelöst]

Hi,
ich habe vor alle Dateien eines bestimmten Typs (Bilder) in ein Verzeichnis zu verlinken. Die etwa 5000 Bilder befinden sich in ca. 600 Verzeichnissen.
Die Bilder aus der Verzeichnisstruktur auslesen klappt. Eine Datei mit allen Dateien anzulegen auch. Allerdings scheitere ich daran auf die Dateien in der Liste Links zu erstellen. Die Manpage von "ln" hilft mir leider nicht weiter und Google bisher auch nicht. Deshalb die (erstmal erste) Frage:
Wie kann ich "ln" dazu bringen auf alle Einträge aus meiner Liste einen Link zu setzen?

Gerne auch rtfm (Welches?) oder eine Idee nach was ich bei Google weitersuchen kann.
Wenn Informationen fehlen reiche ich diese gerne nach.
Oder bin ich auf dem völlig falschen Weg und meine Idee kann nicht klappen? Ausgangsproblem: http://www.unixboard.de/vb3/showthread.php?t=41739

Danke für die Hilfe

PS: Ich hoffe der Post ist hier in der richtigen Forumsabteilung.
 
Zuletzt bearbeitet:
Wenn du's eh schon als Liste o.ä hast, dann machs halt mit
Code:
BILDLISTE=$(cat /die/Datei/in_der_die_Bilderliste_aufgefuehrt/ist);
IFS="\n"; #oder wie auch immer die einzelnen Dateien
              # in der Liste voneinander getrennt sind
for BILD in $BILDLISTE; do
 ln -s $BILD;
done;
im gewünschten Verzeichnis oder so?
 
Zuletzt bearbeitet:
Danke!

Ich habe jetzt folgendes gemacht (nach viel lesen und testen - ja, wenn man weiss wie geht das bestimmt einfacher...):

Code:
du -a /Pfad-zu-den-Bildern | tr '[:blank:]' '\n' | grep -i jpg > fertigzumauslesen

Das funktioniert so lange keine Leerzeichen in den Namen sind. Ich musste naemlich bei der du-Ausgabe die Dateigröße wegmachen.

und danach das Script:
Code:
BILDLISTE=$(cat Verzeichnis-der-Bilder/fertigzumauslesen);
for BILD in $BILDLISTE; do
 ln -s $BILD;
done;

Mit dem field seperator hat er nach jedem "n" getrennt... keine Ahnung warum. Ohne gehts.

Jetzt habe ich nur gemerkt, dass einige Bilder die gleichen Namen haben (Kamera hat nach 10 000 Bildern wieder von vorne angefangen zu zaehlen). Deshalb die Folgefrage:

Gibt es eine Möglichkeit dem Script beizubringen dass es an den Dateinamen eine Zahl (1) anhängt, wenn der Dateiname schon existiert?
 
Code:
du -a /Pfad-zu-den-Bildern | tr '[:blank:]' '\n' | grep -i jpg > fertigzumauslesen
wtf?
Wie wärs mit "ls -1 > foo"? Oder gleich find?
Oder ist die Größe der Dateien von Belang?

Mit dem field seperator hat er nach jedem "n" getrennt... keine Ahnung warum. Ohne gehts.
Das würde funktionieren:
Code:
IFS=$'\n'     # in bash zumindest
# oder
IFS="
"
Auch sollte man den vor der Variablenzuweisung setzen, und dann am Besten als Array. ODER, man lässt den Zwischenschritt einfach ganz weg und iteriert gleich in einer while-read Kombo über die Dateinamen.

Gibt es eine Möglichkeit dem Script beizubringen dass es an den Dateinamen eine Zahl (1) anhängt, wenn der Dateiname schon existiert?
Ja? Einfach irgendeinen Counter mitlaufen lassen. Mit
Code:
[ -e "$file" ]
kann man testen, ob der Dateiname in file eine existente Datei ist. (Hmpf, Formulierung.)
Lektüre
Code:
man test

edit: 'IFS="`echo`"' funktioniert irgendwie doch nicht. Touche.
 
Zuletzt bearbeitet:
Hmm, hard links oder symbolische Links?
Egal, Grundprinzip:
Code:
cd /zielordner
find /oberordner/aller/bilder -iname "*jpg" -exec ln -s {} . \;
 
@saeckereier
Jetzt habe ich nur gemerkt, dass einige Bilder die gleichen Namen haben (Kamera hat nach 10 000 Bildern wieder von vorne angefangen zu zaehlen). Deshalb die Folgefrage:

Gibt es eine Möglichkeit dem Script beizubringen dass es an den Dateinamen eine Zahl (1) anhängt, wenn der Dateiname schon existiert?
 
Ich sag ja:
"wenn man weiss wie geht das bestimmt einfacher..."

Daran sieht man, dass ich es nicht weiss ;-). Ich war ja schon froh irgend eine Lösung hinzubekommen.

Mit "find" kam ich nicht zurecht. Das wird jetzt dank dem Beispiel einfacher. Bei "ls" wusste ich nicht wie ich die Ausgabe in eine Form bringe, dass der Pfad zum Bild in der Art "/Ordner/Unterordner/Bild.jpg" dargestellt wird. Also bin ich auf "du" ausgewichen.
Das mit dem Counter werd ich testen.

Ich werd den Thread auf gelöst setzen. Nochmal vielen Dank für eure Hilfe! Ich hab heute (hoffentlich) wieder viel gelernt :-).
Spannenderweise hab ich auch gelernt, dass sich mein eigentliches Problem anders gelöst hat. Xscreensaver nutzt jetzt doch alle Unterverzeichnisse... warum auch immer das Letztens nicht ging... aber das an anderer Stelle.
 
Zuletzt bearbeitet:
@Gott_in_schwarz: Hatte ich überlesen, das find wollte ich trotzdem ganz gerne anbringen..

@UllaUffz: Eine Möglichkeit wäre auch, einfach die md5 hashes der Dateien statt der Namen zu nehmen, wird ein wenig aufwändiger. Eine andere Möglichkeit, wenn die Kamera EXIF Infos speichert, wäre die Bilder in Datum und Uhrzeit ihrer Erstellung umzubenennen. Letzteres mache ich mit meinen Fotos von der digitalen Spiegelreflex,d damit ich die nachher ordernltich geordnet habe.. Wenn du willst, kann ich dir dazu das Skript nochmal raussuchen..
.
.
.
EDIT (autom. Beitragszusammenführung) :
.

Ach ja, und das es symbolische Links sein sollen hab ich mittlerweile der Überschrift entnommen, ist nich' mein Tag heute :-)
 
Zuletzt bearbeitet:
@saeckereier
Das wäre nett, wenn du das script raussuchen könntest. Ist zwar OT, aber das würde mich für die Verwaltung meiner Photos interessieren :-).
Danke.
 

Ähnliche Themen

Server-Monitoring mit RRDTool

Zurück
Oben