Zunächst einmal weiß ich, dass Sie keine Hardlinks für einen Ordner erstellen können.
Ich habe mich gefragt, ob es einen Befehl (Linux) gibt, der automatisch (und rekursiv) den nachfolgenden Ordnerbaum am Ziel erstellen und dann alle Dateien automatisch von der Quelle zum Ziel fest verknüpfen kann.
Antwort1
Ich bin nicht sicher, was Sie mit „dann alle Dateien automatisch von der Quelle zum Ziel fest verknüpfen“ meinen. Und Sie möchten ausdrücklich Rekursion.
Wenn Sie möchten, dass die beiden Speicherorte "synchronisiert" bleiben, also das Entfernen oder Erstellen einer Datei an beiden gleichzeitig beobachtet werden soll, dann führen Sie die Bind-Mounting-Operation (diese andere Antwort) ist gut. Beachten Sie, dass die Lösung keine Spuren im Dateisystem hinterlässt. Wenn Sie einen Hardlink erstellen, wird dieser im Dateisystem erstellt. Verschieben Sie die Festplatte und mounten Sie das Dateisystem in einem anderen Betriebssystem, und der Hardlink ist immer noch da. Starten Sie neu, und der Hardlink ist immer noch da. Bind-Mounts erfolgen auf Betriebssystemebene. Sie müssten nicht nur dem anderen Betriebssystem separat befehlen, Bind-Mounts durchzuführen, nachdem Sie die Festplatte verschoben und gemountet haben. Wenn Sie die Festplatte nicht verschieben, müssen Sie dem aktuellen Betriebssystem trotzdem befehlen, Bind-Mounts durchzuführen.wiedernach dem Neustart (wenn Sie eine dauerhafte Lösung wünschen).
Ein symbolischer Link zu einem Verzeichnis ist ähnlich und existiert im Dateisystem.
ln -s /original /other
Wenn der Symlink und sein Ziel zum selben Dateisystem gehören und der Symlinkrelativ, dann funktioniert es auch, wenn das Dateisystem woanders gemountet wird (anderer Mountpoint, möglicherweise in einem anderen Betriebssystem). Es gibt Gründe, warum ein Symlink möglicherweise nicht das ist, was Sie wollen (Beispiel).
Beachten Sie, dass Bind-Mounting oder Symlinking nicht wirklich rekursiv ist. Es ist eineinzelAktion, die zwei Pfade „verknüpft“. Bei tieferen Pfaden hat dies keine Auswirkung. Ihre (Halb-)Äquivalenz entsteht, weil es eine Art Verknüpfung zwischen den jeweiligen ((((…)Ur-)Ur-)Groß-)Eltern-„Verzeichnissen“ gibt.
Wenn Sie mit „dann alle Dateien automatisch von der Quelle zum Ziel fest verknüpfen“ meinen „dies automatisch, aber einmal tun“, dann können Sie dies mit folgendem tun cp
:
cp -lR /original /other
( -l
wird von POSIX jedoch nicht benötigt). Es ist wie, cp -R
aber mit Hardlinks. Dies ist wirklich rekursiv. Aber es ist auch eine einmalige Aktion. Die Verzeichnisunterbäume sind getrennt, nur die regulären Dateien werden mit Hardlinks angezeigt. Das Erstellen oder Löschen von Dateien wird nicht gespiegelt.Aktionen, die Hardlinks unterbrechenwird Hardlinks zerstören.
Antwort2
Würde einBind-Mounteine bessere Lösung sein? Es macht genau das, was Sie wollen, nämlich, dass alle Dateien rekursiv unter zwei verschiedenen Pfaden gleich sind.
Dieser Befehl sorgt dafür, dass /other
der Inhalt mit dem vorhandenen Mount oder Verzeichnis identisch ist /original
:
mount --bind /original /other
Alle Änderungen, die Sie in einem der beiden Pfade vornehmen, werden sofort /original
auch /other
im anderen angezeigt, da die beiden Pfade nun Zeiger auf dieselbe Einbindung sind.