Linux cmp 命令(使用一個簡單的例子)


這個 cmp 命令 用於比較 Linux 上的兩個文件。對腳本最有用,因為它只報告文件是否不同。沒有報告差異。它還可用於比較非文本文件,例如庫、圖像和音樂。

cmp命令的基本用法

默認, cmp 如果文件相同,則該命令不顯示任何內容。如果它們不同, cmp 此命令顯示出現第一個差異的字節和行號。顯示文件之間差異的另一個命令是 差異命令.

cmp [options] file_1 file_2
比較文件

如果文件相同, cmp 返回 0 作為退出狀態。如果文件不同, cmp 返回 1 作為退出狀態。

使用 cmp 命令

現在讓我們看看 cmp 命令的實際作用。

1.比較兩張照片

cmp img.png same_img.png

您可以使用 cmp 命令比較圖像,如下所示: cmp 逐字節比較文件。圖像也是字節流,所以如果兩個流相同,則表示圖像相同。 cmp 在這種情況下不報告任何內容。

2.比較備份和當前文件

cmp prog.o.bak prog.o

這比較了 prog.o.bak 和 prog.o。 如果兩個文件不同,則 cmp 會打印如下消息:

prog.o.bak prog.o differ: char 4, line 1

可能產生的另一個輸出是:

cmp: EOF on prog.o.bak 

如果你看到這個,prog.o 的一部分與 prog.o.bak 相同,但 prog.o 中有額外的數據。

3.比較腳本中的文件

默認 cmp 報告作為參數給出的兩個文件是否不同。這是, -s 選項。讓我們看看這如何在簡短的 BASH 腳本中發揮作用。該腳本取決於 cmp 的退出代碼,而不是它是否產生任何輸出。

#!/bin/bash
if cmp -s prog.c.bak prog.c
then
 echo "These files are the same."
fi

cmp 如果文件相同,則返回退出值 0,如果不同,則返回 1,如果發生錯誤,則返回 2。所以腳本說“These files are the same.” 如果文件相同。

4.用cmp命令比較純文本文件

cmp 基本上適用於包含文本的文件。但是,使用命名管道(Linux 提供的一項功能), 直接比較文本 無需創建文件。這個 BASH 技巧對於長網站鏈接很有用。因此,如果您不想關注鏈接,或者您只是懶惰,請使用命名管道 cmp.

cmp <(echo "hello") <(echo "hello")
純文本比較

兩者是同一篇文章,所以 cmp 什麼都不打印。現在讓我們比較兩個不同的文本。

cmp <(echo "hello") <(echo "hello hi")
cmp 你好 不純文本比較

正如預期的那樣 cmp 報導稱存在差異。

筆記: 我之前提到過,如果您使用命名管道,則無需創建文件來比較文本。
命名管道實際上是一個內部文件,一個 BASH 創建的“託管文件”。
BASH 為您完成所有繁重的工作。用戶不必擔心創建外部文件只是為了比較文本。

結論是

cmp 用於比較文件的簡潔方便的工具。它在 *NIX 世界中無處不在,當與命名管道等其他功能結合使用時,可用於節省比較純文本的時間。希望你學到了一些新東西 cmp 從這篇文章訂購。在評論中告訴我使用哪一個 cmp 你還不知道的命令。