为了账号安全,请及时绑定邮箱和手机立即绑定

比较两个目录,哪个目录具有每个文件的最新版本?

比较两个目录,哪个目录具有每个文件的最新版本?

PHP
开心每一天1111 2021-06-22 15:12:59
我花了很多时间寻找解决方案。我知道必须有一个已发布的解决方案,我只是找不到它。我有一个活动目录 (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 并让输出显示哪些文件较新?如果没有,有人可以指出我正确的方向吗?
查看完整描述

1 回答

?
料青山看我应如是

TA贡献1772条经验 获得超8个赞

给定以dir1和为根的两个文件层次结构dir2,其中每个层次结构都包含完全相同的文件名集,您可以使用 find 命令的变体来列出每对文件中较新的文件。


如果时间戳匹配,此代码将随机打印一个文件,但您可以通过适当的过滤选择其他一些行为。


shownewer(){

    find "$1"/ "$2"/ -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



查看完整回答
反对 回复 2021-06-25
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信