2007年11月 9日

[linux-users:107765] Re: ファイル名の先頭に「-」がついたもの

 しらいです。

 んーと、助言をする前に実際試してみるというのはそんなに困難
なことなんでしょうか?

In Message-Id <47325818.5070000@xxxxx>
Yoshinori SATO <redtype00@xxxxx>さんwrites:
> そのファイル名をダブルクォーテーションで括ってみてはどうでしょうか。

>
> 例:
> $ mv "-1234567890.txt" file.txt

 一般に引用符はシェルに評価されるので、この場合 mv(1) には
引数 -1234567890.txt がそのまま渡されます。なので今回の問題
に対しては全く役に立ちません。
 引用符が効果をもたらすのは、「>」「|」「*」といったシェル
のメタ文字を無効化したい場合ですね。他には「 」(空文字) もメ
タ文字なので、これを含むファイル名を引数にする時とか。
 「メタ文字」が何かって言うと、直訳だと「文字を越えた文字」、
もしくはより現実的には「文字として解釈されず何らかの機能を持
った文字」といったところでしょうか。

 ともかく、シングルクォートにしろダブルクォートにしろ、引用
符はシェルの構文解析に対する機能制御であって、シェルが引数を
渡す先の各コマンドに対しては効果をもたらしません。
 今回のケースだと、「-」で始まる引数をオプションだと見なし
ているのはシェルではなくて mv(1) コマンドなので、引用符によ
る対処では制御不能だという訳です。


 因みに有効な解としては、「-」もしくは「--」を引数にしてオ
プション引数の終端と見なす対処と、「./」をファイル名の前に付
けて「-」で始まらないようにする対処があります。
 どちらも既に挙げられていますが、どういうケースでも適用可能
という意味では後者がお奨めです。前者は mv(1) の側で気を効か
せてそうしてくれているに過ぎません。

 「-」方式は、4BSD の頃からの UNIX 的流儀として確立されては
いますが、mv(1) 以外の全てのコマンドで有効かと言うとその保証
はありません。
 「./」方式だと、これで回避出来ないコマンドは何か特殊な事情
により「./-」という文字列をオプション接頭子として扱う文法仕
様ということになりますが、そんな事情は普通考えにくいですね。


P.S.
 今回のケースだと、エクスプローラ的なビジュアルシェルに任せ
るという手はなかったんだろか?KDE も GNOME もファイル名変更
くらいは GUI で出来なかったっけ?

しらい たかし


投稿者 xml-rpc : 2007年11月 9日 03:16
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/66236
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。