將資料夾與 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

tarball 的結構如下:

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/

diff 和 Compare 選項如圖所示這個帖子應該指出磁碟中缺少一個不在 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 最後)
  • 我們區分這兩個列表
  • 並清理

相關內容