고양이 혼란으로 파일 결합

고양이 혼란으로 파일 결합

다음 명령을 수행하면:

$ cat picture.jpg > copy1.jpg

그리고

$ cat -v picture.jpg > copy2.jpg

copy1.jpg은 의 완벽한 복사본이지만 picture.jpg보다 copy2.jpg훨씬 큽니다 picture.jpg.

나는 이것이 copy2.jpgcat이 줄 끝을 a로 대체했다고 생각한 각각의 줄 끝보다 크기 ^M^M더 크기 때문이라고 가정합니다. 이 올바른지?

그렇다면 in cat copy2.jpg인스턴스가 없다는 것을 알게 됩니다 .^Mcopy2.jpg

여기서 무슨 일이 일어나고 있는 걸까요? >출력이 입력과 다를 수 있는 경우 cat을 사용하여 파일을 완벽하게 결합하는 데 신뢰할 수 있습니까 ?

답변1

단지 ^M. 모든인쇄할 수 없는 문자(현재 로케일에서 무엇을 의미하든)가 있는 바이트는 에서 인쇄 가능한 해당 문자로 확장됩니다 cat -v.

을 사용 cat하여 파일을 결합하는 경우 출력을 수정하는 모든 옵션을 피해야 합니다. -band -n(숫자 줄), -E(줄 끝을 로 표시 $), -s(반복되는 빈 줄 억제) 및 -v-T(인쇄 가능 문자를 사용하여 인쇄할 수 없는 문자 표시) 문자).

답변2

당신의 분석이 제 생각에는 맞는 것 같습니다. 나는 파일을 결합하는 데 사용합니다 cat. 이것이 주요 기능이기 때문입니다. -v스위치나 해당 문제에 대한 스위치 없이 그렇게 하십시오 .

cat -v ..파일을 사용하면 본질적으로 파일이 삭제됩니다. 이미지 뷰어에서 열어보셨나요? 나는 당신의 방법을 시도했고 그것이 바로 나에게 일어난 일입니다.

다음 명령 을 사용하여 이에 대한 증거를 볼 수도 있습니다 file.

$ file copy*
copy1.png: PNG image data, 1440 x 847, 8-bit/color RGB, non-interlaced
copy2.png: ASCII text, with very long lines

cat의 정보 페이지에서는 주제에 대해 좀 더 자세히 설명합니다.

'-v'
'--show-nonprinting'
     Display control characters except for LFD and TAB using '^'
     notation and precede characters that have the high bit set with
     'M-'.

On systems like MS-DOS that distinguish between text and binary
files, 'cat' normally reads and writes in binary mode.  However, 'cat'
reads in text mode if one of the options '-bensAE' is used or if 'cat'
is reading from standard input and standard input is a terminal.
Similarly, 'cat' writes in text mode if one of the options '-bensAE' is
used or if standard output is a terminal.

그럼 ^M은 어디에 있나요?

copy2.jpg예를 들어 파일을 열면 vim파일이 흩어져 있는 것을 볼 수 있습니다. 예를 들면 다음과 같습니다.

                  SS#1

관련 정보