匿名質問者
匿名質問者匿名質問者とは「匿名質問」を利用して質問した質問者。
「匿名質問」では、ユーザー名を公開せずに匿名の質問ができます。
詳しくはこちら

Rubyのrenameについての質問

スラッシュを含むファイル名に変更したいのですがそのまま実行してもバックスラッシュを噛ましてもうまくいきませんいい方法はないでしょうか?


oldFilePath = hoge.txt
newFilePath = bob/alice.txt
File.rename(oldFilePath,newFilePath)

試したもの
bob/alice.txt or bob\/alice.txt or bob\\/alice.txt

よろしくお願いします

回答の条件
  • 1人5回まで
  • 13歳以上
  • 登録:2014/07/25 22:30:41
  • 終了:2014/08/01 22:35:03
匿名質問者

質問者から

匿名質問者2014/07/26 07:58:12

すいません 環境は
Mac OS X 10.9.4
Ruby 2.1.1 p76
です

回答(0件)

回答はまだありません

  • 匿名回答1号
    匿名回答1号 2014/07/25 22:47:05
    念のため、お使いのOSとファイルシステムの種類をお聞きしてもよろしいですか?
  • 匿名回答2号
    匿名回答2号 2014/07/26 12:22:23
    スラッシュは「ファイル名」に含めることはできず (RubyではなくOSによる制限)、bob/alice.txtというのは「bobというディレクトリ中のalice.txt」と解釈されますが、bobというディレクトリが既に無ければエラーになると思います。とかそういう話ではなくて?
  • 匿名質問者
    匿名質問者 2014/07/26 13:37:26
    2号さんのおっしゃる通りです
    mvコマンドを使った使ったとしても同じ旨のエラーが出てしまいます
    しかし、Finderからはスラッシュを含めたファイル名を設定できるので何らかの手段があるのではないかと思った次第です。
    最悪、全角スラッシュを使う手もありますが何か方法はないでしょうか?
  • 匿名回答2号
    匿名回答2号 2014/07/26 13:48:03
    お、確かにFinderからは出来ますね。どうやってるんだろうとプログラムから読んでみたら、スラッシュではなくコロン:になっていました。また、プログラムから名前にコロンを含むファイルを作ると、Finderではスラッシュに見えます。

    なのでファイルシステムとしてはコロンで保存してあって、Finderが表示時にスラッシュに置換してるっぽいですね。
  • 匿名質問者
    匿名質問者 2014/07/26 14:00:34
    本当ですね!
    確かにターミナルからみると\:と成っています
    mv aaaaaaa.txt aaaa:aaa.txt または
    mv aaaaaaa.txt aaaa\:aaa.txt とすることで
    aaaa/aaa.txtとすることができました(Ruby のrenameでも同じようにできました)

    解決しました。ありがとうございました。
  • 匿名回答2号
    匿名回答2号 2014/07/26 14:05:29
    MacOSのファイルシステムでは、伝統的にディレクトリを区切るのにスラッシュではなくコロンを使っていたための措置のようです。OSXになったときにカーネルはUnixになり、カーネル内部やUnixツール群は全てスラッシュをディレクトリ区切りに使います。

    そのため、こういうややこしいことになっているようです。

    - ファイルシステム(HFS+)層はコロンがセパレータ。スラッシュをファイル名に含むことができる。
    - カーネルに見せる層でコロンとスラッシュを交換。カーネルやUnixツール群からはスラッシュがセパレータで、ファイル名にコロンを含められるように見える。
    - Carbon層でもう一度スラッシュとコロンを交換。Carbonアプリにはコロンがセパレータに見え、スラッシュをファイル名に入れられる。

    出典: http://www.wsanchez.net/papers/USENIX_2000/

    Rubyなどクロスプラットフォームのプログラムは大抵Unix層でOSにアクセスするので、ファイル名の中はコロン、ということになるわけです。
  • 匿名質問者
    匿名質問者 2014/07/26 14:13:30
    みたいですね。
    逆にコロンをファイル名で含められないのは意外でした。
    丁寧な回答ありがとうございました

    Objective-C - Mac でファイル名に使えない文字 - Qiita : http://qiita.com/uasi/items/996b24185dffb003105a

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません