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