シンボリックリンクのリンク先データも含めてディレクトリを再帰的にコピーする方法

Linux, シェルスクリプト

Linux環境から、FAT32でフォーマットされたUSBメモリなどにディレクトリの中身を丸ごとコピーしたいときがある。

普通にcp -Rコマンドで再帰的にコピーしてしまうと、コピー元にシンボリックリンクが含まれていた場合にシンボリックリンクのリンク先が一切コピーされない。

FAT32はシンボリックリンク非対応の形式なので、普通にはコピーできないのだ。

シンボリックリンクのリンク先の実体も含めてコピーするためには次のコマンドを使う。

cp -LR <コピー元ディレクトリなど> <コピー先ディレクトリ>

例えば、/aaa/bbb/ccc/というディレクトリと、そのディレクトリ以下すべて(シンボリックリンクのリンク先を含む)を、/ddd/eee/というディレクトリの直下にコピーしたい場合は次のコマンドを実行する。

cp -LR /aaa/bbb/ccc/ /ddd/eee/

シンボリックリンクはディレクトリとしてコピー先に作成される。

参考情報

https://superuser.com/questions/216919/how-to-copy-symlinks-to-target-as-normal-folders/216920