2011-03-28 67 views
2

我的項目具有以下結構化妝DIFF忽略符號鏈接

/project/config.mk 
/project/dir1/config.mk -> ../config.mk 
/project/dir2/config.mk -> ../config.mk 

當我用diff創建補丁文件,該/project/config.mk正確完成,但兩個符號鏈接了一些問題。他們都被視爲新文件,差異部分是config.mk文件的全部內容。我試圖找到一個diff選項來禁用以下符號鏈接,但是沒有這樣的選項可用。任何建議表示讚賞。

作爲Overbose的建議,我創建了這個腳本。有用。感謝大家花時間回答。

#!/bin/sh -v 
ori_dir=$1 
new_dir=$2 
patch_file=./patch_file 
if [ -f ${patch_file} ] 
then 
     rm ${patch_file} 
fi 
ori_files=`cd ${ori_dir} ; find ./ -type f ! -type l` 
for i in ${ori_files} ; do 
     if [ -f ${ori_dir}/$i ] 
     then 
       if [ -f ${new_dir}/$i ] 
       then 
         diff -rup ${ori_dir}/$i ${new_dir}/$i >> ${patch_file} 
       fi 
     fi 
done 

回答

2

使用查找方式如下:

find . ! -type l 

這個選項應該跳過以下符號鏈接。在運行diff之前使用該命令來查找您的文件。

+0

請問您可以提供cmd嗎? – 2011-03-28 08:41:54

+0

@dien:對不起..我剛剛嘗試過-P選項,但它不起作用,就像我期待的那樣。無論如何,如果你只需要在普通文件上計算diff,你可以使用:find。 -type f – Heisenbug 2011-03-28 08:49:05

+0

@dien:完整的命令:現在你怎麼給diff命令輸入?你使用腳本? – Heisenbug 2011-03-28 08:59:07

4

如果添加般的線條:

dir1/config.mk 
dir2/config.mk 

到文件.ignore-diff

則可以執行diff(1)這樣的:

diff -ur -X .ignore-diff 
+1

破碎的符號鏈接似乎仍然會引發錯誤,即使忽略這樣的情況。 – 2012-09-29 23:33:01

4

在GNU DIFF V3.3,現在有一選項 - 沒有取消引用,沒有竅門

+1

'--no-dereference'選項由'diff --help'描述,但在Ubuntu Xenial Xerus(16.04)和Raspian Jessie(8)的手冊頁上未提及。 – zrajm 2016-05-29 13:53:25