Symbollink für gewissen Files eines Verzeichnisses

Hans Dampf

Cadet 3rd Year
Registriert
Apr. 2014
Beiträge
49
Hi!

Ich würde gerne einen Symbollink für einen gewissen Filetyp, in einem Verzeichnis einschl. mehrerer Unterverzeichnisse erstellen lassen.

Kann mir jemand sagen wie das geht?

Ach ja, das Verzeichnis liegt auf einem NAS, auf das ich via SMB zugreife.

Die Struktur des Ordners sieht ungefähr so aus.

Hauptordner\1
Hauptordner\2
Hauptordner\3

In 1, 2 und 3 liegen jeweils die Dateien, die ich via Symbollink gern irgendwo zentral abrufen würde.

Danke!

Hans
 
Ein konkretes Beispiel fehlt. Es ist unklar, ob du die symlinks auf dem NAS anlegen willst oder auf deinem lokalen Rechner. Falls letzteres gewünscht ist, fehlt noch die Angabe, welches OS du benutzt, wobei ich mir nicht sicher bin, ob das dann überhaupt funktioniert.
 
KillerCow schrieb:
Ein konkretes Beispiel fehlt. Es ist unklar, ob du die symlinks auf dem NAS anlegen willst oder auf deinem lokalen Rechner. Falls letzteres gewünscht ist, fehlt noch die Angabe, welches OS du benutzt, wobei ich mir nicht sicher bin, ob das dann überhaupt funktioniert.

Also ich möchte das auf meinem NAS anlegen.

Ich habe auch schon im Netz gesehen, das sowas wohl problemlos mittels "find" Befehl realisierbar ist.

Ich kriege es nur nicht so unbedingt hin.

Ich möchte also, dass ein bestimmtes Verzeichnis rekursiv nach einer Datei durchsucht wird und alle gefundenen Dateien unter einem Symbollink auffindbar gemacht werden.
 
Zuletzt bearbeitet:
Wenn ich dein Problem richtig verstehe sollte dieser Befehl helfen:
Code:
find <verzeichnis> <predikat> -printf '"%p" "<ziel>/%f"\n' | xargs -0Iq ln -s q
Als Verzeichnis könntest du in denem Beispiel "Hauptordner" oder "Hauptordner/{a,b,c}" nehmen wenn nicht alle Unterordner vom Hauptordner in Betracht kommen.
Predikate sind zum Beispiel "-name '*.mp3'" und ähnliches.
Das printf gibt dann für jede gefundene Datei das hier aus:
Code:
"<verzeichnis>/<dateiname>" "<ziel/><dateiname>"
Und das wird dann nach der Pipe ('|') von xargs durch überall im Nachfolgenden Kommando eingesetzt wo 'q' steht ('-Iq'), sodass das hier ausgeführt wird:
Code:
ln -s "<verzeichnis>/<dateiname>" "<dateiname>"

Es ist ein wenig gehackt, eigentlich wäre das hier der schönere Weg gewesen:
Code:
find <verzeichnis> <predikat> -exec ln -s {} $(basename {}) \;
Allerdings geht das nicht, weil die subshell zuallererst ausgeführt wird und nicht für jeden Befehl. Man hätte auch '-exec bash "..."' verwenden kann aber da wusste ich dann nicht wie man die subshell hätte escapen müssen.

EDIT:
Hab den schönen Weg gefunden:
Code:
find <...> -exec bash -c "ln -s {} \$(basename \"{}\")" \;
 
Zuletzt bearbeitet:
Zurück
Oben