LINUX: Verknüpfen Sie alle Dateien von einem zu einem anderen Verzeichnis [geschlossen]

123

Ich möchte ln -salle Dateien verknüpfen ( ), die /mnt/usr/lib/in sind/usr/lib/

Es gibt viele Dateien, wie geht das schnell? :) :)

SharpC
quelle
Wie viele Dateien sind "viele" und wie schnell halten Sie "schnell"?
Eric Smith
4
Dies ist 50:50, unabhängig davon, ob es zu "Serverfault" oder "Superuser" passt, aber es ist keine Programmierung, also nicht für den Stackoverflow.
Marc Gravell

Antworten:

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

Ich denke, das gehört allerdings dem Superuser.

Tim Cooper
quelle
6
Dies schließt keine versteckten Dateien ein und verknüpft ganze Verzeichnisse. Wenn einer dieser Punkte nicht Ihren Wünschen entspricht, lesen Sie meine Antwort. Ansonsten ist es der kürzeste Weg.
Cascabel
Du hast recht. Aber Bibliotheken sind normalerweise nicht versteckt. In jedem Fall handelt es sich um Dotfiles. Ihre Lösung ist praktischer.
1
Wird es dauerhaft auf den anderen Ordner verweisen?
nmkyuppie
@YuPPie Ich denke, es wird nur ein Hardlink zu jeder Datei im Verzeichnis erstellt. (das wollte ich heute, also +1: D)
Anzeigename
2
@SargeBorsch Es werden symbolische Links erstellt (Hardlinks sind unterschiedlich).
Jsejcksn
90

GNU cphat die Option, Symlinks zu erstellen, anstatt sie zu kopieren.

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

Beachten Sie, dass dies eine GNU-Erweiterung ist, die in POSIXcp nicht gefunden wurde .

caf
quelle
4
Ihr aktuelles Verzeichnis sollte / usr / sein, um auf diese Weise einen symbolischen Link
herzustellen
@caf Wenn das Ziel Ordner vorhanden ist, dann wird der lib-Ordner in / usr / Ordner
Tamil Selvan C
2
Gute Antwort. Kann auch verwendet werden, um Hardlinks mit -l anstelle von -s zu erstellen.
Fax
19
ln -s /mnt/usr/lib/* /usr/lib/
Michael Krelin - Hacker
quelle
15

Die veröffentlichten Lösungen verknüpfen keine versteckten Dateien. Versuchen Sie Folgendes, um sie einzuschließen:

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

Wenn Sie rekursiv passieren zu wollen, auf die Verzeichnisse und nur Link - Dateien erstellen (so , dass , wenn Sie eine Datei in einem Verzeichnis zu erstellen, ist es wirklich in /usr/libnicht /mnt/usr/lib), können Sie 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
Cascabel
quelle
2
Ich glaube, dies sollte auch als Platzhalter für versteckte Dateien funktionieren, wenn Sie das Globbing in Bash aktiviert haben. Es passt zu allem, was mit einem Punkt beginnt, gefolgt von etwas anderem als nichts oder einem anderen Punkt (dh es schließt ./und aus ../):ln -s /mnt/usr/lib/.!(|.)* /usr/lib
Cascabel