Harte Verknüpfung der Verzeichnisstruktur an anderer Stelle

2

Ich habe ein Verzeichnis, in dem Dateien angezeigt werden. Ich möchte regelmäßig ein Skript ausführen, das alle Dateien in diesem Verzeichnis findet, zu denen nur eine Verknüpfung besteht, und sie in einem anderen Verzeichnis fest verknüpft. Ich möchte jedoch die Verzeichnisstruktur im zweiten Verzeichnis so erstellen, dass sie mit der ersten übereinstimmt.

find / srcdir / -links 1 -exec ln {} / dstdir / \;

Verfügt über einen Hardlink für alle Dateien, erstellt jedoch nicht die benötigten Verzeichnisse.

Wenn ein Verzeichnis nur Dateien enthält, die bereits über mehrere Links verfügen, muss dieses Verzeichnis nicht im Ziel erstellt werden.

Tom Ribbens
quelle
Ihre Frage besagt, dass Sie "ein Verzeichnis haben, in dem Dateien angezeigt werden". Ich nehme an, Sie meinen, Sie haben ein Verzeichnis mit verschiedenen Unterverzeichnissen, in denen Dateien angezeigt werden?
Terdon
Ja in der Tat. Dateien können auch direkt in diesem Verzeichnis
angezeigt

Antworten:

3

Da harte Links ziemlich billig sind, können Sie sie folgendermaßen erstellen: (Dies erstellt harte Links aller Dateien und Verzeichnisse wie in der Quelle)

cp -al source dest

Dann können Sie die Hardlinks entfernen, die sich an einem anderen Ort in Ihrem Dateisystem befinden. (Wenn doppelte harte Links ein Problem darstellen) Verwenden Sie den leicht angepassten Befehl find, den Sie gepostet haben.

SvennD
quelle
0

Wenn ich Ihre Frage richtig verstanden habe und Sie ein Verzeichnis ( sourcedir) mit verschiedenen Unterverzeichnissen haben und die verknüpften Dateien entweder in /sourcedir/oder in /sourcedir/foooder /sourcedir/baretc sein können, sollte dies tun, was Sie brauchen:

find /sourcedir/ -links 1  | sed 's/.sourcedir.//' | while read n; do \
  mkdir -p /destdir/`dirname "$n"`; ln /sourcedir/"$n" /destdir/"$n"; \
done

Es wird verwendet dirname, um das Unterverzeichnis jeder Datei abzurufen und mkdir -pdie Verzeichnisstruktur im Zielverzeichnis zu erstellen.

terdon
quelle