
다음 명령을 수행하면:
$ cat picture.jpg > copy1.jpg
그리고
$ cat -v picture.jpg > copy2.jpg
copy1.jpg
은 의 완벽한 복사본이지만 picture.jpg
보다 copy2.jpg
훨씬 큽니다 picture.jpg
.
나는 이것이 copy2.jpg
cat이 줄 끝을 a로 대체했다고 생각한 각각의 줄 끝보다 크기 ^M
가 ^M
더 크기 때문이라고 가정합니다. 이 올바른지?
그렇다면 in cat copy2.jpg
인스턴스가 없다는 것을 알게 됩니다 .^M
copy2.jpg
여기서 무슨 일이 일어나고 있는 걸까요? >
출력이 입력과 다를 수 있는 경우 cat을 사용하여 파일을 완벽하게 결합하는 데 신뢰할 수 있습니까 ?
답변1
단지 ^M
. 모든인쇄할 수 없는 문자(현재 로케일에서 무엇을 의미하든)가 있는 바이트는 에서 인쇄 가능한 해당 문자로 확장됩니다 cat -v
.
을 사용 cat
하여 파일을 결합하는 경우 출력을 수정하는 모든 옵션을 피해야 합니다. -b
and -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
파일이 흩어져 있는 것을 볼 수 있습니다. 예를 들면 다음과 같습니다.