PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Alle dateien eines Verzeichnisses in ein anderes verlinken



~Gh05t~
16-12-2009, 14:12
Hallo zusammen,
ich möchte alle Dateien eines Verzeichnisses in ein anderes verlinken. Problem an der Sache ist, dass die Dateien Leer- und Sonderzeichen enthalten (als Beispiel die Datei meine, test & datei ).
Dazu habe ich verschiedene Sachen probiert, hier mal zwei meiner Lösungen:
linkdir.sh


#!/bin/bash
DIR=/mein/verzeichnis
find $DIR -maxdepth 1 -type f | while read file; do
# ln -s $(printf '%q' $file) $(printf '%q' $(basename "$file")) # Lösung 1
ln -s \'$file\' \'$(basename "$file")\' # Lösung 2
done

Lösung 1 resultiert in


# ./linkdir.sh
# ls -l
...
lrwxrwxrwx 1 gh05t users 25 2009-12-16 14:45 meine\,test\&datei -> /mein/verzeichnis/meine\,test\&datei

Lösung 2 resultiert in


# ./linkdir.sh
# ls -l
lrwxrwxrwx 1 gh05t users 25 2009-12-16 14:47 'meine, test & datei' -> '/mein/verzeichnis/meine, test & datei'


Seltsamerweise funktioniert Lösung 2 wenn ich es auf der konsole ausführe:


# ln -s '/mein/verzeichnis/meine, test & datei' 'meine, test & datei'
# ls -l
lrwxrwxrwx 1 gh05t users 25 2009-12-16 14:49 meine, test & datei -> /mein/verzeichnis/meine, test & datei


Hat jemand eine Idee wie ich das mache?

msi
16-12-2009, 14:46
# Verzeichnisstruktur kopieren:
find o -type d -print0 | xargs -0n1 -I"{}" mkdir -p s/{}

# alle Dateien absolut verlinken
find o -type f -print0 | xargs -0n1 -I"{}" ln -s `pwd`/{} s/{}

~Gh05t~
16-12-2009, 22:09
hmmm... klingt gut, funktioniert aber nicht. Es wird der absolute Pfad gefunden, damit kann ich nichts anfangen. Hab mal noch ein echo eingebaut um es zu visualisieren:

# find /quell/verzeichnis -type f -print0 | xargs -0n1 -I"{}" echo ln -s `pwd`/{} ziel/{}
ln -s /quell/verzeichnis//quell/verzeichnis/meine_datei ziel//quell/verzeichnis/meine_datei

{} setzt in dem link befehl also den absoluten Pfad, ich bräuchte aber den relativen (bzw. nur den Dateinamen). Hab das find manpage ma durchgeschaut aber nichts passendes gefunden. Den xargs parameter verstehe ich nicht so recht, was macht das n1 hinter dem -0 und wofür steht -I"{}" ?

msi
17-12-2009, 00:09
na wenn du beim find schon nen absoluten pfad verwendest kannst du dir dasnatürlich beim xargs sparen, also einfach das `pwd`/ wegnehmen.
aber dann hast halt den kompletten absolten pfad im ziel verzeichnis
deswegen würd ich dir raten zuvor eine ebene unter das wurzel verzeichnis mit den originaldaten zu gehen und dort find mit relativen pfad zu benutzen, so wie ichs in dem bsp auch vorgemacht hab.

zu den parametern: man page