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 cp
und rsync
Manpages 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
GNUcp
unterstützt Hardlinking statt Kopieren von Dateien:
cp -lR src_dir dest_dir
Wenn dest_dir
es bereits vorhanden ist, wird es src_dir
in kopiert dest_dir
. Sie erhalten am Ende dest_dir/src_dir
Kopien 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