ディレクトリ階層を保持するディレクトリにファイルをハードリンクに再帰的にコピーする方法は?

ディレクトリ階層を保持するディレクトリにファイルをハードリンクに再帰的にコピーする方法は?

あるディレクトリ階層のファイルを別のディレクトリにハードリンクしようとしています。コードは次のとおりです。

# Directories first, works fine, takes sub-second
find src_dir/sub1 src_dir/sub2 -type d -exec bash -c 'cd "$0" && mkdir -p "$@"' dest_dir {} +
# Files next, works fine, takes several seconds
find src_dir/sub1 src_dir/sub2 -type f -exec ln -f {} dest_dir/{} \;

への継続的な呼び出しにより、ハードリンクが非常に遅くなりますln。機能できるフォームが思い出せず、マニュアルページからハードリンクにコピーする方法に関する多くのcp情報が見つかりませんrsync。特定の問題に対してCプログラムを書く傾向があります。

このウサギの牡蠣に飛び込む前に、UNIXや他の評判の良いサードパーティ製ツールを使用してスピードを上げる方法についての提案はありますか?

答え1

牛に似た一種の栄養cpファイルコピーの代わりにハードリンクをサポート:

cp -lR src_dir dest_dir

すでに存在する場合は、コピーされているdest_dirすべてのディレクトリのコピーが作成されます。src_dirdest_dirdest_dir/src_dirsrc_dir

サブセットのみが必要な場合は、src_dirサブディレクトリを明示的にコピーできます。

mkdir -p dest_dir/src_dir
cp -lR src_dir/sub1 dest_dir/src_dir/sub1
cp -lR src_dir/sub2 dest_dir/src_dir/sub2

関連情報