在 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命令。
Attempt to merge with mv command
这些目录不能被合并.因此我们不能像这样使用mv命令去合并目录. 现在你该怎样将原文件保存到"merged"目录中?
2. 解决方法:
cp命令有一个非常有用的选项来帮助我们摆脱这种状况. cp命令的-l 或 --link选项能够创建硬链接而非原文件副本.让我们尝试一下。
在我们尝试cp命令的硬链接选项前,让我们查看一下原文件的inode号码. 可通过tree命令--inodes选项来查看inodes:
Display inodes of original files
现在我们有了inodes的列表,对于cp命令可通过--link选项创建硬链接:
Merge directories with hard links
2.1 验证文件:
现在文件已经被复制,让我们验证一下inodes是否和原文件匹配:
Verify Inodes
2.2 清除:
正如你所看到的,这些文件的inodes和原文件的一样。现在问题已经解决,且原文件已被复制到合并目录中.现在我们能够移除dir1和dir2目录。
Remove original directories
相关文章
- 火爆Github!这个号称后现代编辑能超越Vim么?
- 从业6年后,聊聊我对交互设计和人机交互的理解
- 【深入探究Node】(3)“异步IO” 有九问
- 最近租房有点烦!技术人如何用Python找到称心如意的“小窝”?
- 中国程序员开发的远程桌面火了!Mac可用,仅9MB,支持自建中继器
- 鸿蒙轻内核A核源码分析系列二:数据结构-位图操作
- 那些被编程耽误的语言大师,思想、代码全能一语道破
- 最热门的20种编程语言是如何输出Hello World的?
- 用户态进程/线程的创建 Fork/vfork/Pthread_Create
- 90后“老头儿”和00后Go小子的硬盘夜话
- 2017年薪酬最高的15门编程语言,GO夺冠
- 深入Netty逻辑架构,从Reactor线程模型开始
- 【观点】离开了信息化,大数据就是为他人作嫁衣
- 老司机程序员带你分分钟入门所有编程语言,就靠这个开源项目
- 从0到1,大数据智能供应链之路
- 设计模式之模版方法模式
- PHP生成中间带LOGO图像的二维码
- WordPress 4.9“Tipton”正式版发布
- 重磅,企业实施大数据的路径
- Rollup 快速入门和配置文件