这列出了两个备份中的所有文件,按大小排序:
tar tvf backup1.tar.bz2 |sort -k3 -n >backup1_files.txt
tar tvf backup2.tar.bz2 |sort -k3 -n >backup2_files.txt
我想列出所有存在于 backup2.tar.bz2 但不存在于 backup1.tar.bz2 中的文件,按大小排序。
这个怎么做?
注意:
执行
diff
这些 .txt 文件中的一个将不起作用,因为某些文件的修改日期不会相同。因此,这个问题与Is there a tool to get the lines in a file that are not in another? 不重复?.删除
v
会删除修改日期,还会删除文件大小,所以这不是一个选项,因为不可能按大小对它们进行排序。
如果你有 AWK,你可以像这样使用一个衬里:
这将使用备份 2 的文件名构建一个 AWK 数组,然后检查该数组中是否存在备份 1 的文件名。如果没有,它将打印它们。
编辑:这是一个改进的版本,它对名称中带有空格的文件更加健壮,并且不需要任何临时文件:
您可以将 awk 代码写入文件
intersect.awk
中,然后像这样重复使用它:其他答案中提出的方法不起作用,因为 tar 将打印:
如果存档中有符号链接以及硬链接的类似消息。
所以解决这个问题的唯一方法是使用
star
:对所有档案执行此操作,对输出进行排序,然后使用众所周知的方法比较生成的文件。
该选项
-tpath
告诉star
只打印文件名,在一行上一次。star
是的一部分schilytools
。顺便说一句:如果文件名包含换行符,此方法会混淆比较工具。