Wie kopiere ich Dateien rekursiv als Hardlinks in ein Verzeichnis, wobei die Verzeichnishierarchie erhalten bleibt?

Wie kopiere ich Dateien rekursiv als Hardlinks in ein Verzeichnis, wobei die Verzeichnishierarchie erhalten bleibt?

Ich versuche, Dateien in einer Verzeichnishierarchie fest mit einem anderen Verzeichnis zu verknüpfen. Der Code sieht folgendermaßen aus:

# Directories first, works fine, takes sub-second
find src_dir/sub1 src_dir/sub2 -type d -exec bash -c 'cd "$0" && mkdir -p "$@"' dest_dir {} +
# Files next, works fine, takes several seconds
find src_dir/sub1 src_dir/sub2 -type f -exec ln -f {} dest_dir/{} \;

Das Hardlinking ist aufgrund der sequentiellen Aufrufe von sehr langsam ln. Mir fällt allerdings keine Form ein, die funktioniert, und ich kann in cpund rsyncManpages nicht viel über das Kopieren als Hardlinks finden. Ich tendiere dazu, für das spezielle Problem ein C-Programm zu schreiben ...

Bevor wir uns in dieses Kaninchenloch stürzen: Gibt es irgendwelche Vorschläge, wie man es mit UNIX oder anderen bekannten Tools von Drittanbietern schneller machen kann?

Antwort1

GNUcpunterstützt Hardlinking statt Kopieren von Dateien:

cp -lR src_dir dest_dir

Wenn dest_dires bereits vorhanden ist, wird es src_dirin kopiert dest_dir. Sie erhalten am Ende dest_dir/src_dirKopien aller Verzeichnisse in src_dir.

Wenn Sie nur eine Teilmenge von möchten src_dir, können Sie Unterverzeichnisse explizit kopieren:

mkdir -p dest_dir/src_dir
cp -lR src_dir/sub1 dest_dir/src_dir/sub1
cp -lR src_dir/sub2 dest_dir/src_dir/sub2

verwandte Informationen