file1이 file2의 접두사인지 확인하는 방법? 크기가 124665 및 124858

크기가 124665 및 124858 인 두 개의 파일이 있고 file1이 file2의 접두사인지 여부를 확인하려고합니다.



답변

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

답변

시스템에 cmpGNU 명령 이있는 경우 diffutils한 가지 옵션은

cmp -n 124665 file1 file2

두 파일의 최대 124665 바이트를 비교하여 서로 다르거 나보다 일반적으로보고

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

답변

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비슷한 작업 을 수행한다고 가정 하지만 확인하지 않았습니다.