2017-07-14 89 views
1

類似的帖子在這裏:遞歸的比較具體的文件在不同的目錄

Diff files present in two different directories

這裏:

https://superuser.com/q/602877/520666

但不完全是我要找的。我有2個目錄(包含子目錄和不同的文件類型 - 二進制,圖像,HTML等)。

我希望能夠遞歸地比較兩個目錄之間具有特定擴展名(例如.html,.strings等)的文件 - 它們可能存在於或不存在於(子)目錄中。

我該如何做到這一點?差異似乎只支持排除,我不知道如何利用Find來達到這個目的。

建議?

回答

0

您可以排除與查找所有不必要的fileendings:

(此版本只針對文件結尾匹配)

diff -r -x `find . -type f -name '*.*' | sed 's|.*\.|.*\.|' | sort -u | grep -v YOURFILETYPE | paste -sd "|"` ...rest of diff command 

或者你產生排除的文件列表中前期,並把它傳遞給DIFF:

(此版本還對匹配文件名和你在include.file指定每隔正則表達式)

find /dirA -type f | grep -v YOURFILEENDING > exclude.list 
find /dirB -type f | grep -v YOURFILEENDING >> exclude.list 
diff -X exclude.list -r /dirA /dirB 

如果通過&&連鎖這些命令,你會得到一個方便oneliner;)


包含文件

如果你想使用一個包含文件,你可以使用這個方法:

  1. 您指定的包含文件
  2. 的grep對所有文件文件夾中的匹配,並且把你的含udefile成差異的排除文件(DIFF只需要排除的文件)

下面是一個例子:

複雜的內聯版本:

(此版本只針對文件結尾匹配)

diff -r -x `find . -type f -name '*.*' | sed 's|.*\.|.*\.|' sort -u | grep -v -f include.file | paste -sd "|"` /dirA /dirB 

略微更長的簡單版本:

(此版本也與文件名匹配s以及您在include.file中指定的每個其他正則表達式)

find /dirA -type f | grep -v -f include.file > exclude.list 
find /dirB -type f | grep -v -f include.file >> exclude.list 
diff -X exclude.list -r /dirA /dirB 

每行包含在內。文件是一個正則表達式的grep /表達:

log 
txt 
fileending3 
whateverfileendingyoulilke 
fullfilename.txt 
someotherregex.* 

注意

因爲我無處計算機附近我沒有運行這些。 我希望我的語法正確。

+0

我喜歡這個想法,但我怎麼能使用一個倒置的方法,只有比較「include.list」? – vmoralito

+0

@vmoralito我剛剛更新了我的文章,並提出了一種動態生成包含文件的排除文件的方法,因爲diff只會使用排除文件。但使用上面的方式,你可以使用你的包含文件。 –

0

你可以做最簡單的事情是比較整個目錄:

diff -r /path/the/first /path/the/second 

它會顯示該文件只在目錄中,該文件以二進制方式不同的一個,並全面比較差異兩個目錄中的任何文本文件。

您可以遍歷一組相對路徑通過簡單地讀取文件,每行正是如此的路徑:這樣做對一組特定的擴展

while IFS= read -u 9 relative_path 
do 
    diff "/path/the/first/%{relative_path}" "/path/the/second/%{relative_path}" 
done 9< relative_paths.txt 

也同樣簡單:

shopt -s globstar 
while IFS= read -u 9 extension do 
    diff "/path/the/first/"**/*."${extension}" "/path/the/second/"**/*."${extension}" 
done 9< extensions.txt 
+0

這已經在問題中引用的帖子中進行了介紹。不幸的是,每個「父」目錄中有超過2600個文件,其中很多文件將包含我不關心的更改。我只對我需要擔心的特定文件的更改感興趣。我會繼續探索。 – vmoralito

相關問題