크기가 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
답변
시스템에 cmp
GNU 명령 이있는 경우 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
비슷한 작업 을 수행한다고 가정 하지만 확인하지 않았습니다.