Configuration-Management

將 20 個文件與 diff 進行比較,而不是 2 個

  • June 1, 2016

背景

我們正在從手動管理主機轉向配置管理。

20 個文件

我想比較來自 20 個主機的配置文件 20 次。例如/etc/crontab

案例

我猜大約 20 個文件中有 15 個是相同的。我想查看手動用“vi”修改的五個文件。

我想要一個概述,沒有像修補這樣的自動操作……

如何比較它們…?

我嘗試了我最喜歡的差異工具(meld),但它不允許超過三個文件:-(

我試圖圍繞將 20 個文件相互區分會完成什麼,但也許我有另一種方法。

我假設您想知道在您的所有系統中定義了什麼樣的 cron 作業。我建議不區分文件,而是將它們一起輸出,sort輸出然後用於uniq省略重複的行:

文件1:

10 10 * * * /myjob.sh
* * * * * /everyminute.sh

文件2:

20 20 * * * /evening-job.sh
* * * * * /everyminute.sh

所有文件的所有作業:

cat File1 File2  | sort | uniq -c

 1     10 10 * * * /myjob.sh
 1     20 20 * * * /evening-job.sh
 2     * * * * * /everyminute.sh

第一列顯示了定義此作業的次數。

Sven 的方法可能更適合完全不同的文件。但是,如果真的只有 5 個是唯一的,我寧願做其他事情……查看整個文件而不是一些帶有計數的編碼內容。

校驗它們並顯示名稱和計數。那麼你可能有例如。文件的 5 個唯一版本,然後您可以更輕鬆地將每個版本與第一個、一次一個、4 次進行比較。

sha1sum files/* | sort | uniq -c
vimdiff files/file1 files/file2
# FYI short syntax of above (bash):
vimdiff files/file{1,2}

如果結果太多,可能先刪除不相關的內容,例如註釋和空格。

mkdir /tmp/trimmed
cd /tmp/trimmed
for f in /path/to/files/*; do
   n=$(basename "$f")
   grep -Ev "^[ \t]*$|^[ \t]*#" "$f" > "$n".trimmed
done
sha1sum *.trimmed | sort | uniq -c

引用自:https://serverfault.com/questions/778716