
Ich habe ein Verzeichnis mit riesigen Dateien (insgesamt ca. 1 TB) und möchte sie nicht kopieren. Ich möchte sie jedoch umgehen, daher wäre es praktisch, sie in einer Verzeichnishierarchie zu verknüpfen, auf die ich Zugriff habe (also eine, die ich erstellt habe). Also
/path/to/dirs/
foo
bar
baz/
tri
Sollte kopiert werden nach
~/path/to/dirs/
foo -> /path/to/dirs/foo
bar -> /path/to/dirs/bar
baz/
tri -> /path/to/dirs/tri
Antwort1
Mit GNU:
cd ~/path/to/dirs || exit 1
find /path/to/dirs -type d -printf %P\\0 | xargs -0 mkdir -p
find /path/to/dirs -type f -print0 |
xargs -0 cp --symbolic-link --parents --target-directory=.
Antwort2
Mit GNU Coreutils (also unter nicht eingebettetem Linux oder Cygwin):
cp -al /path/to/dirs ~/path/to/dirs
Wenn diese Option cp
nicht zur Verfügung steht -l
, erstellen Sie zunächst die Verzeichnishierarchie und anschließend einen zweiten Durchgang für die symbolischen Links:
find /path/to/dirs -type d -exec sh -c 'for x do mkdir "$HOME$x"; done' _ {} +
find /path/to/dirs ! -type d -exec sh -c 'for x do ln -s "$x" "$HOME$x"; done' _ {} +
Wenn Sie möchten, können Sie die beiden Durchläufe auch in einem einzigen Befehl kombinieren:
find /path/to/dirs -exec sh -c '
for x do
if [ -d "$x" ]; then
mkdir "$HOME$x"
else
ln -s "$x" "$HOME$x"
fi
done
' _ {} +
Antwort3
cp --no-dereference orig dest
Dadurch bleiben symbolische Links beim Kopieren erhalten. Hier ist die Dokumentation:
-P, --no-dereference never follow symbolic links in SOURCE
-p same as --preserve=mode,ownership,timestamps