兩個目錄差多少?


如果有兩個目錄 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 比較簡單, 又可以順便看出那個子目錄裡面東西比較多。 隨便亂改一氣:

  1. 在某個深層子目錄裡面新增一個檔案 (用 touch 指令最簡單; cp 也可以; 不要忘記還可以 I/O redirection ... 不見得一定要開 editor)
  2. 在某個深層子目錄裡面刪除一個檔案
  3. 在某個深層子目錄裡面修改某個檔案的內容

好了, 如果現在 abc 與 xyz 這兩個目錄是別人給你的, 你如何發現它們那裡不同呢?

	cd ~/abc
	find . -type f | sort > ~/abc.find
	md5sum `cat ~/abc.find` > ~/abc.md5

如法炮製, 產生 ~/xyz.md5, 然後 diff abc.md5 xyz.md5comm -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 -


命令列讀本

  1. 目錄
  2. 前言
  3. 瀏覽
  4. 套件
  5. 圖片整形
  6. 老鼠迷宮
  7. 迷宮積木
  8. 誰常上機?
  9. 網頁做簡報
  10. tidy 網頁
  11. 編碼
  12. 客製
  13. Regexp
  14. 目錄比較
  15. 聯集差集

附錄

  1. GUI 求生
  2. 基本指令
  3. 阿貴管理