在 Linux 中怎样使用cp命令合并目录树

系统 Linux
怎样将两个布局相似的目录树合并成一个新的目录树?为理解该问题让我们思考下面的例子……

怎样将两个布局相似的目录树合并成一个新的目录树?为理解该问题让我们思考下面的例子。

[[117173]]

假设 dir1 和 dir2 目录中分别有3个子目录a,b和c.目录布局如下所示:

Layout of input directories

输入目录布局

在目录a,b和c中有一些文件,tree命令的输出将能更好的说明:

Layout of files

文件布局

1. 使用cp命令创建合并:

现在我们将这两个目录合并成一个名为"merged"新的目录中.完成上述操作最简单的方式就是递归复制目录,如下图所示:

Copy directories recursively to create new merge

递归复制完成新的合并

1.1 cp命令和替换带来的问题:

这种方式所带来的问题是该合并目录中所创建的文件为原文件的副本,并非原文件本身.别急, (你可能正在问自己) 如果不是原文件又有什么问题? 要回答你的问题,考虑下你有很多大文件的情况.那种情形下,复制所有的文件可能花费数小时。

现在让我们回到刚那问题上,且尝试使用mv命令而不是cp命令。

Attempt to merge with mv command

企图使用mv命令进行合并操作

这些目录不能被合并.因此我们不能像这样使用mv命令去合并目录. 现在你该怎样将原文件保存到"merged"目录中?

2. 解决方法:

cp命令有一个非常有用的选项来帮助我们摆脱这种状况. cp命令的-l 或 --link选项能够创建硬链接而非原文件副本.让我们尝试一下。

在我们尝试cp命令的硬链接选项前,让我们查看一下原文件的inode号码. 可通过tree命令--inodes选项来查看inodes:

Display inodes of original files

原文件的inodes

现在我们有了inodes的列表,对于cp命令可通过--link选项创建硬链接:

Merge directories with hard links

使用硬链接合并的目录

2.1 验证文件:

现在文件已经被复制,让我们验证一下inodes是否和原文件匹配:

Verify Inodes

Verify Inodes

2.2 清除:

正如你所看到的,这些文件的inodes和原文件的一样。现在问题已经解决,且原文件已被复制到合并目录中.现在我们能够移除dir1和dir2目录。

Remove original directories

移除原始目录

原文链接:http://linux.cn/article-3494-1.html

责任编辑:牛小雨 来源: linux
相关推荐

2023-08-12 15:05:26

Linuxcp 命令

2022-06-28 09:10:28

Linuxtree命令

2020-04-26 14:25:56

目录Linux操作系统

2014-03-17 10:27:08

Linux cp备份

2018-01-08 15:30:18

Linux命令date

2022-10-25 13:01:36

Linux命令行空目录

2022-11-11 14:55:14

Linuxcron

2021-12-12 09:19:16

find命令Linux

2022-11-02 18:54:00

2019-04-08 16:15:26

Linuxbd命令父目录

2010-09-10 13:57:55

echo命令

2022-11-03 11:19:22

2023-02-07 09:49:26

Linux命令行合并文件

2019-09-24 19:00:41

Linuxrm命令unlink命令

2009-07-31 16:34:44

linux cd命令linux cd命令详

2023-07-04 16:36:03

Linuxcd 命令

2023-07-23 19:26:18

Linuxcat 命令

2018-06-01 10:37:26

Linux归档文件压缩文件

2023-03-04 13:32:35

Linux创建目录

2021-04-22 06:15:59

Linux静态链接动态库
点赞
收藏

51CTO技术栈公众号