シンボリックリンクを含むディレクトリを持っています
user@host:include$ find .. -type l -ls
4737414 0 lrwxrwxrwx 1 user group 13 Dec 9 13:47 ../k0607-lsi6/camac -> ../../include
4737415 0 lrwxrwxrwx 1 user group 14 Dec 9 13:49 ../k0607-lsi6/linux -> ../../../linux
4737417 0 lrwxrwxrwx 1 user group 12 Dec 9 13:57 ../k0607-lsi6/dfc -> ../../../dfc
4737419 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcommon -> ../../../dfcommon
4737420 0 lrwxrwxrwx 1 user group 19 Dec 9 13:57 ../k0607-lsi6/dfcommonxx -> ../../../dfcommonxx
4737421 0 lrwxrwxrwx 1 user group 17 Dec 9 13:57 ../k0607-lsi6/dfcompat -> ../../../dfcompat
それらをカレントディレクトリにコピーする必要があります。結果として得られるリンクは、それらのプロトタイプから独立していて、ターゲットオブジェクトに直接つながるものでなければなりません
cp -s
は適切な動作ではないリンクを作成しますcp -s -L
はディレクトリへのリンクのコピーを拒否しますcp -s -L -r
は、動作しないディレクトリへの相対リンクのコピーを拒否します
どうすればいいの?
198 Basilevs 2010-05-07
cp --preserve=links
男のページから
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,owner-
ship,timestamps), if possible additional attributes: context,
links, xattr, all
個人的には、私は重いコピーのほとんどにcp -av
を使っています。そうすれば、再帰的にすべてを保存して、出力を見ることができます。もちろん、これは個人的な好みにすぎません
他のオプションがあなたの期待通りにならなかった理由としては、-s
はコピーの代わりにリンクを作り、-L
はリンク自体をコピーするのではなく、コピーするファイルを見つけるためにソース内のリンクをたどっています
221 kainosnous 2010-05-07
manページに書いてある通り、-P
を使ってください。この設定では
-P, --no-dereference
never follow symbolic links in SOURCE
56 Ignacio Vazquez-Abrams 2010-05-07
リンクに相対パスが含まれている場合、リンクをコピーしても相対パスは調整されません。リンクの絶対パスを取得するためには、readlink
とスイッチ-f
を使って再帰的に追従してください。例えば、以下のようになります
ln -s $(readlink -f old/dir/oldlink) new/dir/newlink
もし、相対パスを保存したいのであれば、イグナシオ・バスケス=アブラムスが言ったように、cp
の-P
オプションが必要です
31 mrucci 2010-05-07
何人かの方がコメントされているように
cp -a
works well.
男の人から
-a same as -dR --preserve=all
-R copy directories recursively
-d same as --no-dereference --preserve=links
--no-dereference never follow symbolic links in SOURCE
27 Juh_ 2015-01-27
シンボリックリンクをたくさんコピーする必要があるとき、ほとんどの場合、私は実際にディレクトリツリーをミラーリングしようとしています。ですから、シンボリックリンクとそれ以外のすべてをコピーしたいのです
シンボリックリンクをいくつかコピーするにはやりすぎですが、実際にツリー全体をコピーしようとしている場合には非常に便利です
Use tar.
user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )
tar はデフォルトではシンボリックリンクを解決しないので、ミラーコピーのシンボリックリンクは元のツリーのシンボリックリンクと同じ位置を指します
このトリックでは、ミラーリングするディレクトリのルートに tar コマンドを配置するためにサブシェルを利用しています
# already in src?
user@host:/src$ tar cf - . | ( cd /path/to/dest ; tar xf - )
# already in dest?
user@host:/dest$ ( cd /path/to/src ; tar cf - . ) | tar xf -
# just need src/foo?
# this result will be a mirror copy at dest/foo
user@host:/src$ tar cf - foo | ( cd /path/to/dest ; tar xf - )
# mirror to another system?
user@host:/src$ tar cf - . | ssh user@example.com '( cd /path/to/dest ; tar xf - )'
繰り返しになりますが、これはシンボリックリンクをコピーしたいときには毎回適切ではありませんが、知っておくと非常に便利なスニペットです
11 quack quixote 2010-05-07
私は以下のものを使って、本当に大きなディレクトリを複製しました。シンボリックリンクはすべて保存され、コピーは再帰的に行われ、プロセスの視覚的なフィードバックを得ることができました
cp -Prv /sourcer_dir/* /target_dir
11 oarevalo 2012-05-15
試してみてください: cp -pr symlink destination
[root@station1 temp]# ls -l
total 8
-rw-r--r-- 1 root root 0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
[root@station1 temp]# cp -rp /tmp/temp/abc.link1 /tmp/temp/abc.link2
[root@station1 temp]# ls -l
total 12
-rw-r--r-- 1 root root 0 Jul 27 18:40 abc
lrwxrwxrwx 1 root root 13 Jul 27 18:41 abc.link1 -> /tmp/temp/abc
lrwxrwxrwx 1 root root 13 Jul 27 18:42 abc.link2 -> /tmp/temp/abc
[root@station1 temp]#
OS – Centos 5 (Linux)
4 ebe0 2011-07-27
Ubuntuで、ディレクトリ内のリンクやファイルをコピーするときに
cp --no-dereference --preserve=links
3 Greg 2015-12-01
Ignacio Vazquez-Abbrams 上記に書いてあるように、-P
オプションを使用してください。彼が言及していないのは、-P
は-R
なしでは効果がないということです。ですから、少なくともcp -RP
が必要です
(サイトがまだコメントさせてくれないので、別の回答を投稿しました)
2 1234ru 2019-01-12
cp -s, cp -L は特殊なコマンドです。必要に応じて、何も使用しないでください
例えば、aを含むディレクトリDIRとaを指すシンボリックリンクbをコピーします
- cp -s DIR/* N/はコピーの代わりにシンボリックリンクを作成し、N/a->…/DIR/a(リンク)、N/b->(…/DIR/b)はリンク先のリンクを作成します
- cp -L DIR/* N/リンク参照付きコピー、N/a、N/b(DIR/aと同じ)
必要なのは N/a(=DIR/a) と N/b-> …/N/a; なので、 cp -P オプションを使って参照元を変えずにコピーしてください。これも cp のデフォルトだと思います
- -P 参照なし、リンクを保存します
- -d は -P オプションと -p を組み合わせて、モード、所有権、タイムスタンプを保存します
- -a は -d オプションと -R を組み合わせて、ディレクトリを再帰的にコピーします
より多くのオプションについては、man cp
またはcp --help
を参照してください
1 Atif Hussain 2018-06-26