兩個目錄差多少?
如果有兩個目錄 abc 與 xyz 底下的子目錄, 孫目錄結構大約相同, 只有少數幾個檔案不太一樣, 要如何找出相異的部分?
以下分號分開的指令請個別打 這裡寫在一起只是因為講義的作者偷懶...
取得一個壓縮檔 pqr.tgz 檢視它的內容: tar tvzf
pqr.tgz
假設所有檔案都在 pqr/ 子目錄底下。
我們將同樣的東西分別重複放到兩個目錄 abc 與 xyz 底下: tar xzf
pqr.tgz ; mv pqr abc ; tar xzf pqr.tgz ; mv pqr xyz
然後進去
xyz 子目錄裡面看一下有那些子目錄, 孫目錄, ...: cd xyz ;
du
當然也可以下 find . -type d
不過 du
比較簡單, 又可以順便看出那個子目錄裡面東西比較多。
隨便亂改一氣:
- 在某個深層子目錄裡面新增一個檔案 (用 touch 指令最簡單; cp 也可以; 不要忘記還可以 I/O redirection ... 不見得一定要開 editor)
- 在某個深層子目錄裡面刪除一個檔案
- 在某個深層子目錄裡面修改某個檔案的內容
好了, 如果現在 abc 與 xyz 這兩個目錄是別人給你的, 你如何發現它們那裡不同呢?
cd ~/abc find . -type f | sort > ~/abc.find md5sum `cat ~/abc.find` > ~/abc.md5
如法炮製, 產生 ~/xyz.md5, 然後 diff abc.md5
xyz.md5
或 comm -3 abc.md5 xyz.md5
請仔細觀察 diff 的輸出, "<" 符號標示的資料,
來自那個檔案? ">" 呢? 又請查手冊, 看看 comm 後面的
-3 這個 option 是什麼意思。 如果是 -1 或 -2 或這三者的不同組合,
會有什麼效果?
當你已處理完 abc/, 還沒有處理 xyz/ 時, 也可以一口氣這樣下:
cd ~/xyz md5sum `find . -type f | sort` | diff ~/abc.md5 -
這裡的 "-" 表示餵給 diff 的第二個參數是 Standard Input,
所以可以從 pipe 餵給 diff 吃。 很多指令都接受這樣的寫法。
例如要檢查一個檔案 abc.txt 是否已然排序, 可以這樣下:
sort abc.txt | diff abc.txt -
- 本頁最新版網址: https://frdm.cyut.edu.tw/~ckhung/b/clr/difffind.php; 您所看到的版本: February 14 2012 10:32:25.
- 作者: 朝陽科技大學 資訊管理系 洪朝貴
- 寶貝你我的地球, 請 減少列印, 多用背面, 丟棄時做垃圾分類。
- 本文件以 Creative Commons Attribution-ShareAlike License 或以 Free Document License 方式公開授權大眾自由複製/修改/散佈。