如何使用diff命令对比两个文件夹仅筛选新增/创建的文件?
嘿,我懂你的痛点——你就想盯着原始文件夹里新增/创建的文件,结果diff命令把内容修改、日期大小变化这些无关的差异也一股脑扔给你,Java处理起来太麻烦对吧?
其实只要给diff命令加个过滤就能解决问题,试试下面的写法:
第一步:只筛选原始文件夹新增的文件
执行这个命令:
diff -r original_dir copy_dir | grep "Only in original_dir:"
diff递归对比两个目录时,只要某个文件只存在于原始文件夹,就会输出Only in original_dir: 文件名这样的行;而内容修改、文件属性变更的输出格式完全不一样,用grep过滤后,就只会留下你关心的新增文件啦。
第二步:直接提取纯文件名(可选,方便Java处理)
如果不想在Java里再做字符串切割,想直接拿到干净的文件名,可以再加个awk处理:
diff -r original_dir copy_dir | grep "Only in original_dir:" | awk -F': ' '{print $2}'
这个命令会把冒号后面的文件名单独提取出来,输出结果就是纯文件名列表,后续Java读取起来更省心。
另外补充一句:因为你的copy_dir是original_dir的初始副本,理论上不会出现copy里有但原始文件夹里没有的文件,所以完全不用管Only in copy_dir:这类输出,专注过滤原始文件夹的结果就好。
内容的提问来源于stack exchange,提问作者Kino
相关产品推荐
相关产品推荐

