file1이 file2의 접두사인지 확인하는 방법은 무엇입니까?

file1이 file2의 접두사인지 확인하는 방법은 무엇입니까?

크기가 124665와 124858(바이트)인 두 개의 파일이 있고 file1이 file2의 접두사인지 확인하고 싶습니다.

답변1

시스템 cmp에 GNU 명령이 있는 경우 diffutils옵션 중 하나는 다음과 같습니다.

cmp -n 124665 file1 file2

두 파일의 처음 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

네 가지 가능한 출력이 있습니다(어떤 종류의 오류가 발생하지 않는 한).

  • 출력 없음: 파일이 동일합니다.

  • 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확인해보지는 않았습니다.

관련 정보