”–“かパスを加える
-は大概の場合コマンドのオプション開始記号になっているので、
そのままrm等を行うと
$ ls
-file
$ rm -file
rm: illegal option -- l
usage: rm [-f | -i] [-dPRrvW] file ...
unlink file
こんな感じで怒られます。上の場合では-fileと言う名前のうち、
-fと-iはrmのオプションとして存在してるのでそれらがオプションとして
理解された後、lの部分を解釈しようとしてそんなオプション(-l)は無い、
とエラーを出しています。
これに対処する1つの方法は--を使う事。
$ rm -- -file
$ ls
消えました。--は
それ以降に出てくる全ての引数をオプションとは見なさない、
と言う役割を果たすオプションです。
なのでこの場合は-fileを書いた時点でそれ以降がそのまま文字列として
rmに渡されます。
大概のコマンド(touch、mv、cp、cd等)ではこれが有効です(GNU/BSD、Bash/Zsh問わず)。
man bashを見ると
-- A -- signals the end of options and disables further option
processing. Any arguments after the -- are treated as file-
names and arguments. An argument of - is equivalent to --.
こんな感じで書かれています。
また、要するに先頭が-である名前がダメなので、
ファイル指定するときにパスを加えてあげるだけでも扱える様になります。
現在のディレクトリなら./を加えるだけ。
$ touch -- -file
$ ls
-file
$ rm ./-file
$ ls
$
ディレクトリの場合でも同様。
$ mkdir -- -dir
$ ls
-dir
$ cd ./-dir
$ pwd
~/-dir
$ cd ../ && rm -rf -- -dir
$ ls
$
また、*を使った展開にも有効です。
$ ls
-dir -file
$ rm -rf -- *
$ ls
$
または
$ ls
-dir -file
$ rm -rf ./*
$ ls
$
Sponsored Links
