Grz*_*cki 45 hard-link cp files
如何将具有共同文件的目录从一个分区移动到另一个分区?
让我们假设我们已经挂载了/mnt/X带有硬链接共享文件的目录的分区。如何将这些目录移动到另一个分区,让它/mnt/Y保留那些硬链接。
为了更好地说明“与硬链接共享文件的目录”是什么意思,这里是一个例子:
# let's create three of directories and files
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
# and copy it with hardlinks
cp -r -l a hardlinks_of_a
Run Code Online (Sandbox Code Playgroud)
更具体地说,假设文件的总大小为 10G,每个文件有 10 个硬链接。问题是如何使用 10G 将它移动到目的地(有人可能会说用 100G 复制它然后运行重复数据删除 - 这不是我要问的)
cas*_*cas 41
rsync 有一个-Hor--hard-links选项,并且具有通常的 rsync 优点,可以停止和重新启动,并重新运行以有效处理在上次运行期间/之后更改的任何文件。
-H, --hard-links
This tells rsync to look for hard-linked files in
the source and link together the corresponding
files on the destination. Without this option,
hard-linked files in the source are treated as
though they were separate files. [...]
Run Code Online (Sandbox Code Playgroud)
阅读rsync手册页并搜索 -H。那里有更多关于特定警告的详细信息。
Ala*_*rry 32
GNU 以cp -a递归方式复制,尽可能多地保留结构和元数据。源目录中文件之间的硬链接包含在其中。要特别选择硬链接保留而不具有所有其他功能-a,请使用--preserve=links.
mkdir src
cd src
mkdir -p a/{b,c,d}/{x,y,z}
touch a/{b,c,d}/{x,y,z}/f{1,2,3,4,5}
cp -r -l a hardlinks_of_a
cd ..
cp -a src dst
Run Code Online (Sandbox Code Playgroud)
Ala*_*rry 17
POSIX 尚未标准化该tar实用程序,尽管他们已标准化了tar存档格式。用于操作 tar 存档的 POSIX 实用程序被调用pax,它具有能够在单个进程中执行打包和解包操作的额外功能。
mkdir dst
pax -rw src dst
Run Code Online (Sandbox Code Playgroud)
Ala*_*rry 13
在源目录中创建一个 tar 存档,通过管道发送它,然后在目标目录中解压它。
# create src as before
(cd src;tar cf - .) | (mkdir dst;cd dst;tar xf -)
Run Code Online (Sandbox Code Playgroud)
Pyk*_*ler 10
来源:http : //www.cyberciti.biz/faq/linux-unix-apple-osx-bsd-rsync-copy-hard-links/
制作精确副本所需的是
rsync -az -H --delete --numeric-ids /path/to/source/ /path/to/dest/
Run Code Online (Sandbox Code Playgroud)