Unix 在终端中,将多个文件夹合并为一个文件夹
我有一个由WDBackup(western digital external HD backup util)创建的备份目录,其中包含每天备份的目录以及备份内容的增量内容 因此,层次结构如下所示:Unix 在终端中,将多个文件夹合并为一个文件夹,unix,command-line,merge,copy,recursion,Unix,Command Line,Merge,Copy,Recursion,我有一个由WDBackup(western digital external HD backup util)创建的备份目录,其中包含每天备份的目录以及备份内容的增量内容 因此,层次结构如下所示: 20100101 My Documents Letter1.doc My Music Best Songs Every First Songs.mp3 My song.mp3 # modified 20100101 20100102 My Document
20100101
My Documents
Letter1.doc
My Music
Best Songs Every
First Songs.mp3
My song.mp3 # modified 20100101
20100102
My Documents
Important Docs
Taxes.doc
My Music
My Song.mp3 # modified 20100102
...etc...
Merged
My Documents
Important Docs
Taxes.doc
Letter1.doc
My Music
Best Songs Every
First Songs.mp3
My Song.mp3 # modified 20100102
只备份已更改的内容,并且所做的第一次备份包含选定要备份的所有文件
我现在要做的是,在保持文件夹结构的同时,从最旧到最新,将这些过时的文件夹逐次复制到一个“合并”文件夹中,以便覆盖旧内容并保留新内容
例如,如果仅使用这两个示例文件夹,最终合并的文件夹将如下所示:
20100101
My Documents
Letter1.doc
My Music
Best Songs Every
First Songs.mp3
My song.mp3 # modified 20100101
20100102
My Documents
Important Docs
Taxes.doc
My Music
My Song.mp3 # modified 20100102
...etc...
Merged
My Documents
Important Docs
Taxes.doc
Letter1.doc
My Music
Best Songs Every
First Songs.mp3
My Song.mp3 # modified 20100102
希望这是有道理的
谢谢
Josh您可以在bash for循环中使用rsync,例如:
$ for d in 2010* ; do rsync -av ./$d/ ./Merged/ ; done
请注意,在实际运行此程序之前,您可能只想谨慎一点,并测试它是否真的会执行您希望它执行的操作-为此,您可以使用rsync的-n
标志执行“干运行”:
如果目录名实际上是YYYYMMDD格式的,您可以对它们进行排序。 所以,这只是一次遍历一个的问题,从旧的开始,复制所有内容到目标,覆盖以前的内容。效率很低,但很有效
cd $my_disk_full_of_backups
for x in (ls | sort); do cp -Rf $x/* /my_destination/; done
尽管它很难看,但在几乎所有安装了bash的unix系统上都应该具有相当的可移植性
有关详细信息,请参阅bash(1)、ls(1)和sort(1)。我有这个能力!!谢谢你,伙计。完全正确简直吓人,这是多么优雅。当然是创意。保罗的rsync做得更干净了。谢谢。他比我快了40秒:)说真的:Paul的解决方案依赖于字母排序(通过shell路径名扩展),这可能是你想要的,我习惯于排序,因为我太经常需要数字排序(sort-n)。您还需要rsync,这在每个系统上都不存在。(FreeBSD在标准安装中没有,我现在不知道)。