cmp 指令

用途

比較兩個檔案的內容,並報告第一個不同的字元。

語法

cmp [ -l | -s ] File1 File2

說明

cmp 指令會比較 File1File2 參數指定的檔案,並將結果寫入標準輸出。 如果您對 File1File2 參數指定 - (減號) , cmp 指令會讀取該檔案的標準輸入。 只能從標準輸入讀取一個檔案。 在預設條件下,如果檔案相同,則 cmp 指令不會顯示任何內容。 如果不同, cmp 指令會顯示第一個差異發生的位元組和行號。 如果指定 -l 旗標,且其中一個檔案是另一個檔案的起始子序列 (亦即,如果 cmp 指令在找到任何差異之前先讀取一個檔案中的檔案結尾字元) ,則 cmp 指令會注意這一點。 一般而言,請使用 cmp 指令來比較非文字檔,並使用 diff 指令來比較文字檔。

旗標

項目 說明
-l (小寫 L) 針對每一個差異,顯示以十進位表示的位元組數,以及以八進位表示的不同位元組數。
-s 只傳回結束值。 值 0 表示相同檔案; 值 1 表示不同檔案; 值 2 表示無法存取檔案或遺漏選項。

結束狀態

這個指令會傳回下列結束值:

項目 說明
0 檔案是相同的。
1 檔案不同。 即使一個檔案是另一個檔案的起始子序列 (一個檔案與另一個檔案的第一部分相同) ,也會提供此值。
> 1 發生一個錯誤。

範例

  1. 若要判定兩個檔案是否相同,請輸入:
    cmp prog.o.bak prog.o
    此比較 prog.o.bak prog.o. 如果檔案相同,則不會顯示訊息。 如果檔案不同,則會顯示第一個差異的位置; 例如:
    prog.o.bak prog.o differ: char 4, line 1
    如果訊息cmp: EOF on prog.o.bak則會顯示「」的第一部分prog.o與相同prog.o.bak,但其中有其他資料prog.o.
  2. 若要顯示每一對不同的位元組,請輸入:
    cmp  -l prog.o.bak prog.o
    這會比較檔案,然後顯示每個差異的位元組數 (十進位) 和不同位元組數 (八進位)。 例如,如果第五個位元組是中的八進位 101prog.o.bak及 141prog.ocmp 指令會顯示:
    5 101 141
  3. 若要比較兩個檔案而不寫入任何訊息,請輸入:
    cmp  -s prog.c.bak prog.c
    這會提供結束值0如果檔案相同,則值為1如果不同,或值為2如果發生錯誤。 此指令形式通常用於 Shell 程序中。 例如:
    if cmp  -s prog.c.bak prog.c
    then
    echo No change
    fi
    此部分 Shell 程序會顯示No change如果兩個檔案相同的話。

檔案

項目 說明
/usr/bin/cmp 包含 cmp 指令。