将文件夹与 tarball 进行比较

将文件夹与 tarball 进行比较

我有这样的目录结构

Code
├── cse701.tgz
└── cse701
    ├── cse701.md
    ├── CSE701.md
    ├── CSE701_pandoc.md
    ├── cse701.pdf
    ├── cse.pdf
    ├── default.yaml
    ├── html2tex.log
    ├── test.md
    └── missing.md

压缩包的结构如下:

drwxrwxr-x zenith/zenith     0 2020-12-02 20:18 cse701/
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/default.yaml
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/CSE701_pandoc.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/html2tex.log
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/test.md
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse.pdf
-rw-rw-r-- zenith/zenith     0 2020-12-02 21:19 cse701/cse701.md
tar --diff -zf cse701.tgz  cse701/
tar --compare -zf cse701.tgz  ./cse701/

差异和比较选项如下这个帖子应该指出的是,磁盘中缺少一个不在 tarball 上的文件。

但是,那gnu tar 文档表示它将显示文件是否已被修改,但将忽略文件系统中在存档中没有相应成员的文件。如果文件在存档中存在但在文件系统中不存在,tar 将报告差异。

那么,我如何查找创建 tarball 后是否有新文件添加到文件夹中?

答案1

这不是一行代码,但是它可以完成您想要的操作:

cd /path/to/Code
tar -tf cse701.tgz | sed 's#/$##' >tgz
find cse701 >fs
diff -uw fs tgz
rm fs
rm tgz

解释:

  • 首先我们切换到相关目录
  • 然后我们列出 tar.gz 内容,删除/行尾的 es(tar -t将它们放在那里作为目录)
  • 然后我们在相应的文件系统子树中找到所有文件和目录(findputs /es 在最后)
  • 我们对这两个列表进行区分
  • 并清理

相关内容