Cat
加入帶有貓混淆的文件
如果我執行以下命令:
$ 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
都比行尾大。它是否正確?如果那樣做
cat copy2.jpg
,我發現沒有^M
in的實例copy2.jpg
。這裡發生了什麼?
>
如果 cat的輸出可能與其輸入不同,是否可以依靠 cat 完美地加入文件?
這不僅僅是
^M
。 每個帶有不可列印字元的字節(無論在您目前的語言環境中意味著什麼)都將擴展為cat -v
.如果您
cat
用於連接文件,則需要避免修改輸出的每個選項:-b
和-n
(數字行),-E
(用 標記行結尾$
),-s
(抑制重複的空行)-v
和-T
(使用 printable 顯示不可列印字元人物)。
你的分析對我來說是正確的。我會
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
你會看到裡面到處都是它們,例如: