我正在尝试从一个目录到另一个目录创建一个“更改的文件”包,并且需要找到能够处理此问题的 Linux/Unix 工具/实用程序。
例子:
- Package_1.1/(旧)
- Package_1.2/(新)
- changed_files/(仅限已更改和新的文件和目录)
changed_files
Package_1.2
将是一个包含仅已添加或更改的文件的递归结构的目录Package_1.1
)
更新:我尝试使用:
cd Package_1.2
rsync -a -c --compare-dest=../Package_1.1 . ../changed_files/
find -depth ../changed_files -type d -empty -delete
但是,有些文件的修改时间略有不同,虽然这些文件被复制过来了,但内容却完全相同。(md5 对每个文件都生成了相同的校验和)。因此,虽然我认为使用此命令已经很接近了,但我仍然遗漏了一些东西。
答案1
当使用 时rsync
,似乎-c
( --checksum
) 选项不会覆盖( )内的-t
( --times
) 选项,该选项使用,因此它仍会查看文件修改时间。-a
--archive
-rlptgoD
一个可能的解决方案是使用:-rlpgoDc
而不是-a
。命令如下:
cd Package_1.2
rsync -rlpgoDc --compare-dest=../Package_1.1 . ../changed_files/
find -depth ../changed_files -type d -empty -delete
rsync
这可能不是最优雅的解决方案,也许有人对如何独自完成整个工作有更好的想法。