如何复制目录和符号链接文件?

如何复制目录和符号链接文件?

我有一个包含巨大文件的目录(总计约 1TB),但我不想复制它们。但是,我想解决它们,因此将它们链接到我有权访问的目录层次结构(也称为我创建的目录层次结构)中会很方便。所以

/path/to/dirs/
  foo
  bar
  baz/
    tri

应该复制到

~/path/to/dirs/
  foo -> /path/to/dirs/foo
  bar -> /path/to/dirs/bar
  baz/
    tri -> /path/to/dirs/tri

答案1

使用 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=.

答案2

使用 GNU coreutils(即在非嵌入式 Linux 或 Cygwin 上):

cp -al /path/to/dirs ~/path/to/dirs

如果您cp没有该-l选项,请先创建目录层次结构,然后再创建符号链接:

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' _ {} +

如果您愿意,可以将两个通道合并为一个命令:

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
' _ {} +

答案3

cp --no-dereference orig dest

这将在复制时保留符号链接。这是文档:

 -P, --no-dereference         never follow symbolic links in SOURCE
 -p                           same as --preserve=mode,ownership,timestamps

相关内容