ディレクトリとシンボリックリンクファイルをコピーする方法は?

ディレクトリとシンボリックリンクファイルをコピーする方法は?

大容量ファイル(合計約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' _ {} +

必要に応じて、2つのチャンネルを1つのコマンドにまとめることができます。

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

関連情報