こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

unixでファイルの中身をコピーしたらサイズが変わりました・・・

すいません。UNIX初心者です。

unixでAというファイルをcatコマンドで全部表示させ全コピーし
別のウィンドウにviで貼り付け、Bというファイルを作ったのですが
何故かファイルサイズが変わってしまいました。
cp -pでは変わらないのですが・・・

sdiffでAとBを比較したら何も差分はなかったのですが、
diffで比較すると一部を除いて差分が出てきたのですが、見た目どこに差分があるのかわかりません。スペースか何かか?と思ったのですが、肉眼で確認する限り違いがあるようには思えません。

unixの端末からftpでwindowsの端末にファイルを転送したときも同じようにファイルサイズが変わってしまいました。。。
二回目やったら何故かファイルサイズ変わらず成功しましたが。

すいません、考えられる可能性を教えていただけますでしょうか

投稿日時 - 2008-10-08 01:01:57

QNo.4385525

困ってます

質問者が選んだベストアンサー

表示画面からのcopyでは、画面に表示された状態で記録されます。
cat で表示させたときに、ファイル内のtabコードが一連の空白に変換されて、copyでは一連の空白として記録される、といったこともおきます。
改行コードも含めて、このような画面表示の時点で変換される制御コードの差異が表れているように思います。

unixからwindowsにftpで転送するときも、asciiモードだと改行コードの変換などがおきます。(binaryモードで転送すると、コードの変換が行われないので、サイズは変わらないかと思います。)

投稿日時 - 2008-10-08 10:35:53

お礼

ご回答ありがとうございました。
原因はtabがスペースでコピーされている事でした。
od -c コマンドにて16進数に変換した際に、\t の記号が元のファイルに含まれていて、viで編集したファイルには含まれておらず、代わりにスペースが含まれていました。
みなさんのおかげで解決することができました。ありがとうございます。

投稿日時 - 2008-10-12 20:37:39

ANo.4

このQ&Aは役に立ちましたか?

3人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

そもそも,「cat で表示させたものを,画面からcopy&paste」するのはコピーではありません.
タブがスペースに展開される,文字としては表示されない制御コードが消える,など,いろいろな変化が生じてしまいます.
一度,diffやcmpコマンドでどう変わったか比べてみたら、納得できると思いますよ.

投稿日時 - 2008-10-08 10:32:56

お礼

ご回答ありがとうございました。
原因はtabがスペースでコピーされている事でした。
od -c コマンドにて16進数に変換した際に、\t の記号が元のファイルに含まれていて、viで編集したファイルには含まれておらず、代わりにスペースが含まれていました。
みなさんのおかげで解決することができました。ありがとうございます。

投稿日時 - 2008-10-12 20:38:09

ANo.2

> 見た目どこに差分があるのかわかりません。
ということは、改行コードだと思います。

こうした場合は、16進ダンプをとると、違いは分かるのですが。

改行コードのことをWEB検索されるとよいと思います。

投稿日時 - 2008-10-08 08:43:31

お礼

ご回答ありがとうございました。
原因はtabがスペースでコピーされている事でした。
od -c コマンドにて16進数に変換した際に、\t の記号が元のファイルに含まれていて、viで編集したファイルには含まれておらず、代わりにスペースが含まれていました。
みなさんのおかげで解決することができました。ありがとうございます。

投稿日時 - 2008-10-12 20:38:34

ANo.1

基本知識として、OSによってテキストファイルの形式は二つの点で違う。
一つは使用している文字コードで、もう一つは改行コード。

たとえばWindowsで作成したテキストファイルを
ftpでテキストモードでUNIXへ転送したり
UNIX上のテキストエディタにカットアンドペーストして保存すると
Windowsで作成したファイルよりもファイルサイズが小さくなります。

MS-DOS系とUNIX系とMacOSでは改行コードがそれぞれ違うというのは基本で
正確には、その中でも例外があったりしたと思います。
面倒くさいので詳細は調べません。

で、改行コードが不適切だと、テキストファイルの認識も
誤認識されることがあるわけで、一般的にはnkfとかで対処したりします。

投稿日時 - 2008-10-08 01:12:35

お礼

ご回答ありがとうございました。
原因はtabがスペースでコピーされている事でした。
od -c コマンドにて16進数に変換した際に、\t の記号が元のファイルに含まれていて、viで編集したファイルには含まれておらず、代わりにスペースが含まれていました。
みなさんのおかげで解決することができました。ありがとうございます。

投稿日時 - 2008-10-12 20:39:00

あなたにオススメの質問