您可以排除與查找所有不必要的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;)
與包含文件
如果你想使用一個包含文件,你可以使用這個方法:
- 您指定的包含文件
- 的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.*
注意
因爲我無處計算機附近我沒有運行這些。 我希望我的語法正確。
我喜歡這個想法,但我怎麼能使用一個倒置的方法,只有比較「include.list」? – vmoralito
@vmoralito我剛剛更新了我的文章,並提出了一種動態生成包含文件的排除文件的方法,因爲diff只會使用排除文件。但使用上面的方式,你可以使用你的包含文件。 –