アカウント名:
パスワード:
何を悩んでいるのか知りませんが, ".*" と指定した場合は "." も ".." も ".hoge" もマッチしますが "hoge" はマッチしません. "*" と指定した場合は "hoge" にはマッチしますが "." も ".." も ".hoge" もマッチしません.UNIXマシンが無ければcygwinでも試せます. "echo /tmp/.*" とか実行してみればわかります.で, "/tmp/.hoge" や "/tmp/.hogehoge" など, "/tmp" の中の "." で始まるファイルやディレクトリを全部一括して消そうと思って,迂闊に "rm -fr /tmp/.*" とかやっちゃうと "/tmp/.." が含まれるので(略),というだけの単純な話で
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
にわかな奴ほど語りたがる -- あるハッカー
コマンドを解釈してみる。 (スコア:2, おもしろおかしい)
# df
# du -h
# free -tk
なお、日本には下記コマンドはありません。
# ulimit
次の一手 (スコア:3, おもしろおかしい)
となると今度は/tmpディレクトリのゴミを削除して…と
rm -rf /tmp/.*
#古いネタなのでAC
Re:次の一手 (スコア:0)
rm -rf /
なんじゃね?
Re:次の一手 (スコア:1)
もっとも、私の環境(FreeBSD)だと、親切にも
> rm: "." and ".." may not be removed
といって拒否してくれます(同様に「rm -rf /」もできません)
Re:次の一手 (スコア:0, オフトピック)
くだらない質問で申し訳ありません。
「rm -rf /tmp/.*」で「/tmp/..」がマッチして上位ディレクトリの内容が削除されるのは分かるんですが、
「rm -rf /tmp/*」だと大丈夫なのは何故なのでしょうか?
「rm -rf /tmp/*」でも単純に考えれば「/tmp/..」がマッチしますし。
Re:次の一手 (スコア:1)
UNIX のシェル的には、ワイルドカード文字列「*」 は、. で始まるファイルにマッチしません。
そのため「rm -rf /tmp/*」だと、. や .. が消されないだけでなく
/tmp 下の、. で始まるファイルは削除されずに残ります。
Re:次の一手 (スコア:0, オフトピック)
Unix のシェルでは、ワイルドカール文字列 "*" のみ指定した場合には、 "." で始まるファイル (隠しファイル及び上位ディレクトリ) にはマッチしないんですね。
もうちょっと詳細に考えてみると、
(1) Unix シェル では "*" は "." で始まるデータにはマッチしない。
これだと、".*" は "./" にはマッチするけど、"../" にはマッチしないので命題(元レス)に反する。
(2) Unix シェル で "*" は "." を含むデータにはマッチしない。
拡張子とかにも使われるから、ありえない。
(3) Unix シェル で "*" を単体で指定した場合、"." で始まるファイル・ディレクトリにはマッチしない。
これかなー。
暇な時にでも実験してみようかと思います。
Re:次の一手 (スコア:0)
で, "/tmp/.hoge" や "/tmp/.hogehoge" など, "/tmp" の中の "." で始まるファイルやディレクトリを全部一括して消そうと思って,迂闊に "rm -fr /tmp/.*" とかやっちゃうと "/tmp/.." が含まれるので(略),というだけの単純な話です.
Re:次の一手 (スコア:1)
Re:次の一手 (スコア:1)
「ファイル名冒頭の.だけは、ワイルドカード指定が使えない」んです。
そのため、*にも?にも[.]にもマッチしません。
だから、
「*」「?hoge」「[.]hoge」は .hoge にマッチしませんが、
「.*」「.?hoge」「.[.]hoge」 は ..hoge にマッチします。
これは簡単には正規表現で表せないですね。
Re:次の一手 (スコア:1)
完全に理解しました。
"*" が何らかの正規表現のような役割をするわけではなく、ファイル名の冒頭だけ特別扱いになっているということですね。
親切に回答していただき本当にありがとうございました。