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.
linux
bash
shell-script
Tom Ribbens
quelle
quelle
Antworten:
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)
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.
quelle
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/foo
oder/sourcedir/bar
etc sein können, sollte dies tun, was Sie brauchen:Es wird verwendet
dirname
, um das Unterverzeichnis jeder Datei abzurufen undmkdir -p
die Verzeichnisstruktur im Zielverzeichnis zu erstellen.quelle