如果我执行以下命令:
$ cat picture.jpg > copy1.jpg
和
$ cat -v picture.jpg > copy2.jpg
copy1.jpg
是 的完美复制品picture.jpg
,但copy2.jpg
比 的大很多picture.jpg
。
我认为这是因为copy2.jpg
cat 认为的行尾被替换成了^M
,而且每个^M
行尾的大小都比行尾大。这是正确的吗?
如果这样做cat copy2.jpg
,我发现没有^M
in的实例copy2.jpg
。
这里发生了什么?>
如果 cat 的输出可能与其输入不同,那么可以依靠 cat 来完美地连接文件吗?
答案1
这不仅仅是^M
。 每一个带有不可打印字符的字节(无论在当前语言环境中意味着什么)将被扩展为cat -v
.
如果您使用cat
连接文件,则需要避免修改输出的每个选项:-b
and -n
(数字行),-E
(以 标记行结尾$
),-s
(抑制重复的空行),and -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
您会发现其中散布着它们,例如: