2009-08-28 5 views
90

I (ln -s) alle Dateien verknüpfen möchten, die in/mnt/usr/lib/in/usr/lib/LINUX: Link alle Dateien von einem in ein anderes Verzeichnis

Es gibt viele Datei, Wie geht es schnell? :)

+0

Wie viele Dateien sind "viele" und wie schnell "schnell"? –

+3

Das ist 50:50 ob es "serverfault" oder "superuser" wäre, aber es ist keine Programmierung, also nicht für stackoverflow. –

Antwort

145
ln -s /mnt/usr/lib/* /usr/lib/ 

Ich denke, das gehört Superuser, obwohl.

+1

Dies schließt keine versteckten Dateien ein und verbindet ganze Verzeichnisse. Wenn beides nicht das ist, was Sie wollen, sehen Sie meine Antwort. Ansonsten ist es der kürzeste Weg. – Cascabel

+0

Sie haben Recht. Aber Bibliotheken sind normalerweise nicht versteckt. In jedem Fall sind dotfiles beteiligt Ihre Lösung ist praktischer. – flokra

+1

wird es dauerhaft auf den anderen Ordner zeigen? – nmkyuppie

11

ln -s/mnt/usr/lib/*/usr/lib/

14

Die erzielte Lösungen werden keine versteckten Dateien verknüpfen. Um sie aufzunehmen, versuchen Sie dies:

cd /usr/lib 
find /mnt/usr/lib -maxdepth 1 -print "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 

Sollten Sie passieren wollen rekursiv die Verzeichnisse und nur Link-Dateien erstellen (so, dass, wenn Sie eine Datei in einem Verzeichnis erstellen, ist es wirklich in /usr/lib ist nicht /mnt/usr/lib), Sie können dies tun:

cd /usr/lib 
find /mnt/usr/lib -mindepth 1 -depth -type d -printf "%P\n" | while read dir; do mkdir -p "$dir"; done 
find /mnt/usr/lib -type f -printf "%P\n" | while read file; do ln -s "/mnt/usr/lib/$file" "$file"; done 
+1

Ich glaube, dies sollte auch als eine Möglichkeit, in versteckten Dateien Platzhalter zu verwenden, wenn Sie erweiterte Globbing in bash aktiviert haben. Es passt alles an, beginnend mit einem Punkt, gefolgt von etwas anderem als nichts oder einem anderen Punkt (dh es schließt '. /' Und '../' aus): 'ln -s/mnt/usr/lib /.! (|.) */usr/lib' – Cascabel

68

GNU cp hat eine Option Symlinks zu erstellen, anstatt zu kopieren.

cp -rs /mnt/usr/lib /usr/ 

Hinweis, dies ist eine GNU-Erweiterung nicht gefunden in POSIX cp.

+2

Ihr aktuelles Verzeichnis sollte/usr/lauten, um auf diese Weise einen symbolischen Link zu erstellen. –

+0

@caf Wenn das Ziel ein vorhandener Ordner ist, wird der lib-Ordner innerhalb des Verzeichnisses/usr/erstellt –