あるディレクトリ階層内のファイルを別のディレクトリにハードリンクしようとしています。コードは次のようになります。
# 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
man ページでハードリンクとしてのコピーについてあまり見つけることができません。特定の問題に対して C プログラムを書くことに傾いています...
その穴に飛び込む前に、UNIX または他の有名なサードパーティ ツールを使用して速度を上げる方法について何か提案はありますか?
答え1
GNUcp
ファイルのコピーの代わりにハードリンクをサポートします:
cp -lR src_dir dest_dir
dest_dir
がすでに存在する場合、これsrc_dir
は にコピーされ、内のすべてのディレクトリのコピーがdest_dir
作成されます。dest_dir/src_dir
src_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