Configuration-Management
將 20 個文件與 diff 進行比較,而不是 2 個
背景
我們正在從手動管理主機轉向配置管理。
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