• ベストアンサー

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% (2198/4045)
回答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

  • UNIXで、ディレクトリを比較して、ファイル・ディレクトリの存在を比較したい

    やりたいこと自体は単純なことなのですが・・ UNIXのコマンドで、 2つのディレクトリA、Bを比較して、 Aだけにあるディレクトリ・ファイルのみを取得できるようなものを教えてください。 (ファイルが同一かどうかは問題ではなくて、あくまでも存在不存在の比較です。) コマンドを組み合わせたり、オプションを使ってもかまいません。 diffコマンドってこういうとき使えないのでしょうか。

  • 再度:ファイルのコンペアツール(Windows)

    Windowsのツールで、プログラムのソースファイルを比較する (新旧の差分を抽出する)ツールを知っている方、教えて下さい。 UNIXやLINUXのdiffの様な機能を持ったツールを探しています。 コマンドプロンプト以外のツールで、できればフリーソフトを希望します。! ▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ 以上

  • UnixのシンボリックリンクファイルをWindowsマシンへコピーする際の問題回避方法

    UNIXのファイル群をバックアップの為にWindowsからFTPでgetしているのですが、シンボリックリンクファイルをWindowsにFTPするとエラーで途中で転送が停止してしまいます。 リンク状況はなるべく保持した形でバックアップを取りたいのですがどうしたらよいでしょうか? 考えられる方法として、(1)UNIXのシンボリックリンクをaliasに変換しながらGetするようなツールはあるのでしょうか? また(2)UNIX上で取り合えずシンボリックリンクの一覧を表示させたいのですが、どのようなコマンドがありますでしょうか? (find のオプションをチェックしているのですが良い方法が分からなかったので...) symbolic linkファイルを元ファイルで置き換え(cp -fpr等でリンク元がコピーされる)更にどのような置き換えをしたかログを残したく思っています。 以上宜しくお願いします。

  • 大きいサイズのファイルの扱い方 UNIX AIX

    お世話になります。 UNIX(AIX)環境での大きいサイズのファイルの扱いについての質問です。 viで大きいサイズ(500MBくらい)のテキストファイルを 開きたいのですが、マシンのメモリ不足で開くことができません。 このような大きいサイズのファイルを 大雑把にわけたい(3等分とか、5等分とか)のですが どのような方法があるか?教えてください。 (マシンの性能を上げる!という解答以外でおねがいします。) wcコマンドで全体の行数を調べようとしても、エラーが帰ってきてしまって調べられません。 headコマンドで頭から100行出力しようとしてもエラーが帰ってきます。 tailコマンドを使えば、ファイルの終端から、サイズを決めて出力することは、できます。 tailコマンド使用例 tail -k 50000 AAA.txt > BBB.txt

  • UNIXからWindowsへのファイル転送

    UNIXからWindowsサーバーへFTP以外でファイル転送をしようと考えています。 方法としてはSFTPがあると思いますが、 Windowsサーバー側に条件はなにがありますでしょうか? IISでFTPを構築しないとだめでしょうか? UNIXでsftpコマンドは実行できることを確認しています。 また、逆のパターンとして WindowsサーバーからUNIXサーバーへWinSCPでのファイル転送の場合は WinSCPを導入するだけでよいでしょうか? 転送する側でIISでのFTP設定も必要でしょうか? 初歩的な質問で申し訳ございませんが、 ご教授の程よろしくお願いいたします。

  • UNIX~WINDOWS間での日本語ファイルのFTP配送

    UNIX~WINDOWS間で日本語ファイル名がついたファイルをFTPで配送しようと思っています。ですが普通に配送しようとすると550エラーが発生してしまい思うように送ることができません。この2つのサーバ間での日本語ファイルのFTP通信をする場合にどのような処理をすればよいのでしょうか。 なお、WINDOWSはwindows2003server、UNIXはsoralis8が導入されています。FTPサーバはIIS6.0です。 ご存知のかた、いらっしゃいましたらよろしくお願いします。

  • 拡張コピー(CopyExt)の代用ソフト探してます

    Windows7 64bit版でなぜか 拡張コピー(CopyExt)が動かないので、 拡張コピー(CopyExt)の代用ソフト探してます 必要なのは、コピー元ファイルの「比較」機能です。 私がやりたいのは、一度マスターファイル群から抽出した数個の差分ファイルを 再度マスターファイル群と比較して相違がないことを確認する作業です。 拡張コピー(CopyExt)では、コピー元:差分ファイル群/コピー先:マスターファイル群 で、ファイルの比較を実行することでこれができました。 DIFFソフトなどでよくあるWinMergeやDFなどは、コピー先全ファイルに対してDIFFを行いますが、 これでは無駄に時間がかかって仕方がありません。 もっと他にいいソフト有りませんか?

  • WINDOWSで作ったファイルをUNIXで開く

    LatexとTgifで解説とフローチャートを作成し、できたファイルをPDFに変換して提出するという課題があるんですが、学校はUNIX(SunOS)で家のパソコンはWINDOWSです。ですので A.LatexとTgifでフローチャートらを作成し、   それをPDF化する。 B.他の作図ソフトでフローチャートらを作成し、   それをPDF化する。 ということをWINDOWS環境で行う方法を教えていただけないでしょうか。(できれば、使うソフトの説明があるサイトも) つまり、UNIX環境で開ける"解説とフローチャートが描かれたPDFファイル"をWINDOWS環境で作ればいいわけです。 (PDFファイルなら、それがWINDOWS環境で作ったものであってもUNIX環境で開く事はできるんですよね。)

  • UNIXのdiffコマンドについて

    UNIXのdiffコマンドは、ファイルを比較するときに同じテキストであっても時々は違っていると出力されるケースがあると聞きましたが、詳しく内容をご存じの方教示願います。(OS[solaris,HP-UX,AIX,Linux]の違いにも関係があるようですが?)

  • 拡張子を指定して、ファイルの差分を取る方法

    WindowsXPです。 フォルダを比較して、ファイル(テキストファイル)の差分をとる方法をお教えください。 ここで重要な条件は、比較する拡張子を指定できなければなりません。 例えば、拡張子が、txtのファイルのみとか、txtとcfのみなど。 サブディレクトリの中のファイルも比較できなければなりません。 どうも、このような場合には、diffというものを使うらしいのですが、 コマンドプロンプトでdiffと打っても 「'diff' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」 というだけで、使えないようです。