サイズが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
確認してみませんでした。