• ベストアンサー

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

すいません。UNIX初心者です。 unixでAというファイルをcatコマンドで全部表示させ全コピーし 別のウィンドウにviで貼り付け、Bというファイルを作ったのですが 何故かファイルサイズが変わってしまいました。 cp -pでは変わらないのですが・・・ sdiffでAとBを比較したら何も差分はなかったのですが、 diffで比較すると一部を除いて差分が出てきたのですが、見た目どこに差分があるのかわかりません。スペースか何かか?と思ったのですが、肉眼で確認する限り違いがあるようには思えません。 unixの端末からftpでwindowsの端末にファイルを転送したときも同じようにファイルサイズが変わってしまいました。。。 二回目やったら何故かファイルサイズ変わらず成功しましたが。 すいません、考えられる可能性を教えていただけますでしょうか

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

  • ベストアンサー
  • foobar
  • ベストアンサー率44% (1423/3185)
回答No.4

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

masashissu
質問者

お礼

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

その他の回答 (3)

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.3

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

masashissu
質問者

お礼

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

  • yakan9
  • ベストアンサー率54% (2244/4125)
回答No.2

> 見た目どこに差分があるのかわかりません。 ということは、改行コードだと思います。 こうした場合は、16進ダンプをとると、違いは分かるのですが。 改行コードのことをWEB検索されるとよいと思います。

masashissu
質問者

お礼

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

  • vaidurya
  • ベストアンサー率45% (2714/5983)
回答No.1

基本知識として、OSによってテキストファイルの形式は二つの点で違う。 一つは使用している文字コードで、もう一つは改行コード。 たとえばWindowsで作成したテキストファイルを ftpでテキストモードでUNIXへ転送したり UNIX上のテキストエディタにカットアンドペーストして保存すると Windowsで作成したファイルよりもファイルサイズが小さくなります。 MS-DOS系とUNIX系とMacOSでは改行コードがそれぞれ違うというのは基本で 正確には、その中でも例外があったりしたと思います。 面倒くさいので詳細は調べません。 で、改行コードが不適切だと、テキストファイルの認識も 誤認識されることがあるわけで、一般的にはnkfとかで対処したりします。

masashissu
質問者

お礼

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

関連するQ&A