
我正在 OSX 上工作,目錄中有多個 CSV 檔案。我想檢查其中是否有兩個相同。
我試過了:
cmp file1.csv file2.csv || echo "files are different"
這告訴我前兩份文件是不同的。
我也嘗試過:
diff -q --from-file *.csv
這告訴我,第一的文件與其他文件不同。
但是我怎麼能檢查每個文件,而不必手動執行呢?
答案1
以下內容在 Linux 中對我有用。我沒有 Mac 終端機來測試這是否有效。
$ md5sum * | sort | uniq --check-chars=32 --group
36da49e13da596245e85e9e47ab8a04f *y
8c3c2e6aa3be26d9f1bbbcd9a401e88e *x
8c3c2e6aa3be26d9f1bbbcd9a401e88e *z
該程式uniq
需要排序的輸入。檢查其手冊頁以了解其他輸出選項。
答案2
除了史蒂文的答案之外,您還應該在終端機中輸入以下內容:
shasum * | sort | uniq
這應該會為您提供結果。
答案3
你真正想要的是一個漂亮的 shell 腳本。一個腦殘的 shell 腳本是:
for i in `ls`; do diff -sq --from-file=$i `ls` 2> /dev/null; done | grep identical
當然,這樣做的問題是,它會根據每個其他文件(包括其自身)檢查每個文件,即使檢查已經完成。我確信有一個很好的 awk 腳本可以在更小的空間中做正確的事情,但我現在感覺不太像 awk 那樣。
您可能想要考慮的其他 diff 選項是 -w 如果空白沒有影響, -b 如果空白的存在很重要但您真的不關心有多少或是什麼類型, --strip- Trailing-cr 如果某些檔案是在認為需要換行和回車的系統上創建的。