file1がfile2のプレフィックスであることを確認する方法は?

file1がfile2のプレフィックスであることを確認する方法は?

サイズが124665と124858(バイト)の2つのファイルがあり、file1がfile2のプレフィックスであることを確認したいと思います。

答え1

システムcmpにGNUコマンドがある場合、diffutilsオプションの1つは次のとおりです。

cmp -n 124665 file1 file2

2 つのファイルの最初の 124665 バイトまで比較して異なるか、またはより一般的に報告します。

cmp -n "$(wc -c < file1)" file1 file2

答え2

file1変数サイズがあり、FILE1_SZ実装headが(非標準)-cオプションをサポートしているとします。

if head -c "$FILE1_SZ" file2 | cmp -s - file1; then
    echo "file1 is a prefix of file2"
else
    echo "file1 is not a prefix of file2"
fi

答え3

GNUはcmpこの問題をより簡単な方法で解決できます。

cmp file1 file2

4つの可能な出力があります(何らかのエラーが発生しない限り)。

  • 出力なし:ファイルは同じです。

  • cmp: EOF on file1:file1 は file2 の接頭辞です。

  • cmp: EOF on file2:file2 は file1 の接頭辞です。

  • file1 file2 differ: byte NNN, line MMM:どちらももう一方の接頭辞ではありません。

残念ながら、これらのケースは終了コードから区別されないように見えるため、スクリプトで使用するのは少し厄介です。また、EOF on file1メッセージはstderrに送信され、file1 file2 differメッセージはstdoutに送信されます。

他のバージョンも同様の機能をするようですが、cmp確認してみませんでした。

関連情報