• ベストアンサー

マルチバイトファイル名のファイルが消せない

ホストはHP-UXでコードはEUCの設定になっています。 誤って、SJISファイル名のファイルをホストに作成してしまったため、ファイルを消そうと思います。 testというディレクトリにEUCファイル名・SJISファイル名のファイルが混在した状態で、rm -rf test/* (シェルは/bin/sh)を実行したところ、見事にSJISファイル名のファイルが削除できませんでした。 シェルをcshに変更したところ、今度は削除できました。 *で削除しているので全て削除可能なのでは、と思うのですが、削除できない理由は何なのでしょうか。 ファイル削除手段の方法はとりあえず分かりました(シェルを変更して削除)ので、向学のため理由が知りたいです。

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

  • ベストアンサー
  • ralf124c
  • ベストアンサー率52% (232/446)
回答No.2

Shift-JISの文字体系にはシステムが利用するコード(例:チルダ ~ 等)が含まれるためです。 たとえば「鯨、救、樫、×」等はチルダと同じ「0x7E」が後のバイトに付きますがUNIXでチルダはホームディレクトリを表します。 文字体系の問題以外にはファイル名にこんな文字使ったらイケンという文字を堂々と使う超ど級の素人方がいらっしゃいます。 スペースとかスラッシュ(マカーに多い)とか、何じゃこりゃーというファイルが届いて開くことが出来んというケースが・・・ スペースが(使えるのに)なぜいけないかという理由の例: UNIXでテキストファイルを表示する時の例  cat ABC DEF.txt だと明白ですよね。 命令は 「ABC」というファイルと「DEF.txt」という2つ別々のファイルとして認識します。 cat "ABC DEF.txt" とすると使える場合も有りますが・・・ 通常スペースは命令を与える場合の「パラメータの区切り」として利用されるのが一般的だからです。

nishimry
質問者

お礼

回答ありがとうございました。 よく考えたら、そうですよね。スペースとか入ると、別ファイルですよね。 シェルによる動作の違いはそれとして、次から気をつけて生きたいと思いました。

その他の回答 (1)

  • takapiii
  • ベストアンサー率55% (944/1707)
回答No.1

アスタで全削除は怖いのでは? 別のディレクトリで、コマンドの履歴からうっかり実行って事あります。 i-nodeで消せばいいのではないでしょうか。 ls -i でi-nodeを確認して、 find . -inum i-node番号 -exec rm {} \; 消せない理由は文字コードが違うからです。

nishimry
質問者

お礼

i-nodeによる削除もできたのですね。 今まで使ったことがありませんでしたので勉強になりました。 ありがとうございます。 ”消せない理由=文字コード”は、理屈では分かっているのですが、なぜコードが違うと消せないのか?が知りたかったです。(ファイル名にスペースが入るから?・・・)

関連するQ&A