比较两个目录,哪个目录具有每个文件的最新版本?
Comparing two directories, which one has the newest version of each file?
我花了很多时间寻找解决方案。我知道必须有一个已发布的解决方案,我一直找不到它。
我有一个具有相同文件名的实时目录 (Dir1) 和开发 (Dir2) 目录。内容可能不同也可能相同,日期也一样。
使用PHP或linux命令行,我需要得到一个递归列表,其中包含每个文件的最新版本。由于我的托管环境,我无法使用 rsync。
这将给出一个目录的最新修改文件的一个很好的列表:
find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n20
缺点是我必须手动划分输出。
这很好,但它没有显示哪些文件较新:
diff --brief -rq www/dashboard dev.efit.health/dashboard
有没有办法使用 diff 并让输出显示哪些文件较新?
如果没有,有人可以指出正确的方向吗?
给定根植于 dir1
和 dir2
的两个文件层次结构,其中每个层次结构都包含完全相同的文件名集,您可以使用 find 命令的变体来列出每个文件中较新的一对文件。
如果时间戳匹配,此代码将随机打印一个文件,但您可以通过适当的过滤选择其他行为。
shownewer(){
find ""/ ""/ -type f -printf '%T@ :%p\n' |\
sort -r |\
sort -t/ -s -k2,2 |\
sed 's/^[0-9.]* ://;n;d'
}
find
打印带有时间戳的文件(自纪元以来的小数秒)
- 第一个
sort
按时间戳反向排序
- 第二个
sort
忽略顶级目录并按路径的剩余部分排序
sed
打印每对的第一个文件
警告:如果文件夹不包含完全同一组文件,输出可能完全错误。一次删除真的会把事情搞砸。
测试类似:
# create test data
$ mkdir dir1 dir2
$ touch {dir1,dir2}/{1,2,3,4,5}
$ sleep 1
$ touch dir1/2 dir2/{3,5}
$ shownewer dir1 dir2
dir2/1
dir1/2
dir2/3
dir2/4
dir2/5
我花了很多时间寻找解决方案。我知道必须有一个已发布的解决方案,我一直找不到它。
我有一个具有相同文件名的实时目录 (Dir1) 和开发 (Dir2) 目录。内容可能不同也可能相同,日期也一样。
使用PHP或linux命令行,我需要得到一个递归列表,其中包含每个文件的最新版本。由于我的托管环境,我无法使用 rsync。
这将给出一个目录的最新修改文件的一个很好的列表:
find . -type f -printf '%TY-%Tm-%Td %TH:%TM: %Tz %p\n'| sort -n | tail -n20
缺点是我必须手动划分输出。
这很好,但它没有显示哪些文件较新:
diff --brief -rq www/dashboard dev.efit.health/dashboard
有没有办法使用 diff 并让输出显示哪些文件较新?
如果没有,有人可以指出正确的方向吗?
给定根植于 dir1
和 dir2
的两个文件层次结构,其中每个层次结构都包含完全相同的文件名集,您可以使用 find 命令的变体来列出每个文件中较新的一对文件。
如果时间戳匹配,此代码将随机打印一个文件,但您可以通过适当的过滤选择其他行为。
shownewer(){
find ""/ ""/ -type f -printf '%T@ :%p\n' |\
sort -r |\
sort -t/ -s -k2,2 |\
sed 's/^[0-9.]* ://;n;d'
}
find
打印带有时间戳的文件(自纪元以来的小数秒)- 第一个
sort
按时间戳反向排序 - 第二个
sort
忽略顶级目录并按路径的剩余部分排序 sed
打印每对的第一个文件
警告:如果文件夹不包含完全同一组文件,输出可能完全错误。一次删除真的会把事情搞砸。
测试类似:
# create test data
$ mkdir dir1 dir2
$ touch {dir1,dir2}/{1,2,3,4,5}
$ sleep 1
$ touch dir1/2 dir2/{3,5}
$ shownewer dir1 dir2
dir2/1
dir1/2
dir2/3
dir2/4
dir2/5