如何将文件作为硬链接递归复制到保留目录层次结构的目录中?

如何将文件作为硬链接递归复制到保留目录层次结构的目录中?

我正在尝试将一个目录层次结构中的文件硬链接到另一个目录。代码如下所示:

# 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

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

相关内容