作者 主題: 請問指令 diff 的進階用法  (閱讀 7690 次)

0 會員 與 1 訪客 正在閱讀本文。

al

  • 憂鬱的高中生
  • ***
  • 文章數: 136
    • 檢視個人資料
請問指令 diff 的進階用法
« 於: 2005-05-01 06:58 »
目標: 比較兩個目錄 d1 , d2 內的所有檔案, 將其中的差異複製到 d3
作法: diff --new-file d1 d2
結果: new-file 從銀幕輸出成亂碼
請問如何才能將其中的差異複製到 d3 ?
謝謝!

ifgh

  • 懷疑的國中生
  • **
  • 文章數: 84
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #1 於: 2005-05-01 09:09 »
是這樣嗎?
diff -urN d1 d2 > d3

al

  • 憂鬱的高中生
  • ***
  • 文章數: 136
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #2 於: 2005-05-01 20:31 »
感謝 ifgh 大大快速回覆
因為白天外出, 晚上回到家, 趕緊測一下
diff -urN d1 d2 > d3
結果出現 d3 是一個目錄的失敗訊息, 刪除目錄 d3
diff -urN d1 d2 > d3
結果 d3 是一個檔案, 而且 -N 有處理到檔案內容分析
如果我要的是
1. d3 是一個放置 d1 d2檔案差異的目錄
     如 d1:/f1,f2,f3, d2:/f1,f2,f3,f4,f5
    => d3:/f4,f5
2. 不必分析 f4,f5 的內容, 我把 -N 取消
     => d3 還是一個檔案
請問大大如何能得到 d3:/f4,f5 還是要用到 正規表示式 ?
謝謝!

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #3 於: 2005-05-02 09:56 »
假設目錄名稱一樣,且目錄名稱長度只有兩個字元,
底下是找出你要的檔名:
代碼: [選擇]
find d1 d2 -type f |  sort --field-separator=/ -k 2 | uniq --skip-chars=3 -u

al

  • 憂鬱的高中生
  • ***
  • 文章數: 136
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #4 於: 2005-05-02 14:47 »
上一行
find d1 d2 -type f |  sort --field-separator=/ -k 2 | uniq --skip-chars=3 -u
執行結果與
diff d1 d2 執行結果一模一樣,只有在銀幕上看出差異
請問如何才能在新目錄 d3 (已存在或未存在) 中得到檔案 f4 f5 ?
謝謝!

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #5 於: 2005-05-02 15:51 »
引述: "al"
上一行
find d1 d2 -type f |  sort --field-separator=/ -k 2 | uniq --skip-chars=3 -u
執行結果與
diff d1 d2 執行結果一模一樣,只有在銀幕上看出差異
請問如何才能在新目錄 d3 (已存在或未存在) 中得到檔案 f4 f5 ?
謝謝!


接下來只不過再做一個 copy 的動作而已,
如果還是不會,就該去翻翻書了。

你d1, d2底下有很多層目錄嗎?
沒有的話,就這樣囉
代碼: [選擇]
[ ! -d d3 ] && mkdir d3; cp `find d1 d2 -type f |  sort --field-separator=/ -k 2 | uniq --skip-chars=3 -u` d3

al

  • 憂鬱的高中生
  • ***
  • 文章數: 136
    • 檢視個人資料
請問指令 diff 的進階用法
« 回覆 #6 於: 2005-05-02 21:18 »
可以了
謝謝 !