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

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

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

假设 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命令。

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

Attempt to merge with mv command

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

2. 解决方法:

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

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

 原文件的inodes

Display inodes of original files

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

 使用硬链接合并的目录

Merge directories with hard links

2.1 验证文件:

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

 Verify Inodes

Verify Inodes

2.2 清除:

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

 移除原始目录

Remove original directories

原文发布时间:2014-07-30

本文来自云栖合作伙伴“linux中国”

时间: 2024-10-21 16:06:48

在 Linux 中怎样使用cp命令合并目录树的相关文章

Linux中使用split来分割合并文件

Linux中使用split来分割合并文件 我们使用split命令来完成: 用法:split [选项]... [输入 [前缀]]将输入内容拆分为固定大小的分片并输出到"前缀aa"."前缀ab",...:默认以 1000 行为拆分单位,默认前缀为"x".如果不指定文件,或者文件为"-",则从标准输入读取数据. 长选项必须使用的参数对于短选项时也是必需使用的.&http://www.aliyun.com/zixun/aggr

【日常小记】linux中强大且常用命令:find、grep

在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.find命令 find命令是一个无处不在命令,是linux中最有用的命令之一.find命令用于:在一个目录(及子目录)中搜索文件,你可以

Linux中强大且常用命令:find、grep

在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.find命令 find命令是一个无处不在命令,是linux中最有用的命令之一.find命令用于:在一个目录(及子目录)中搜索文件,你可以

linux 中强大且常用命令:find、grep

在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,它哥俩可以算是必会的linux命令,我几乎每天都要用到它们.   1.find命令 find命令是一个无处不在命令,是linux中最有用的命令之一.find命令用于:在一个目录(及子目录)中搜索文件,你可以指定一些匹配条件,如按文件名.文件类型.用户甚至是时间戳查找文件.下面就通过实例来体验下find命令的强大. 1.1.find命令的一般形式 man文档中给出的find命令的一般形式为: find [-H]

如何在 Linux 中使用 Alpine 在命令行里访问 Gmail

如何在 Linux 中使用 Alpine 在命令行里访问 Gmail 假如你是一个命令行爱好者,我很确信你会使用这个强大的工作环境来执行哪怕是一项日常任务的工具,并为之欢呼,例如从 安排日程 . 管理财务 到 获取 Facebook .Twitter等任务.(LCTT 译注:阅读本文的另一个前提是,假如你还能访问 Gmail 或者知道 Gmail 是什么的话.) 在这个帖子中,我将为你展示 Linux 命令行的另一个漂亮干练的使用案例:访问 Google 的 Gmail 服务,为此,我们将使用

在Linux中的使用 ss 命令检查套接字/网络连接

在Linux中的使用 ss 命令检查套接字/网络连接 ss是iproute2包的一部分(控制TCP/IP网络和流量的工具).iproute2的目标是替代先前用于配置网络接口.路由表和管理ARP表的标准Unix网络工具套装(通常称之为"net-tools").ss工具用于导出套接字统计,它可以显示与netstat类似的信息,且可以显示更多的TCP和状态信息.因为它直接从内核空间获取信息,所以会更快.ss的操作和netstat很像,所以这让它可以很容易就可以取代netstat. 使用和常见

java的httpclient能实现linux中的curl -u命令吗?

问题描述 java的httpclient能实现linux中的curl -u命令吗? java的httpclient能实现linux中的curl -u命令吗?如何实现 解决方案 HttpClient类可以完成文件流的发送的,所以我觉得可以实现curl -u的功能. java还有一个FTPClient工具,也可以完成文件上传,应该对应的是ftp文件上传的功能的.

【日常小记】linux中强大且常用命令:find、grep【转】

转自:http://www.cnblogs.com/skynet/archive/2010/12/25/1916873.html 在linux下面工作,有些命令能够大大提高效率.本文就向大家介绍find.grep命令,他哥俩可以算是必会的linux命令,我几乎每天都要用到他们.本文结构如下: find命令 find命令的一般形式 find命令的常用选项及实例 find与xargs grep命令 grep命令的一般形式 grep正则表达式元字符集(基本集) grep命令的常用选项及实例 1.fin

Linux中如何访问远程共享的目录?

Linux中如何访问远程共享的目录? 将如下的行放到/etc/fstab中: //ip/share1 /mnt/d smbfs defaults,auto,userhttp://www.aliyun.com/zixun/aggregation/11696.html">name=name,password= pass 0 0 其中ip是远程机器的ip 地址,是share1该机器共享目录的共享名,/mnt/d是要将该分区mount到本地linux的目录,name和pass是可以访问该共享目录的