web-dev-qa-db-ja.com

rmワイルドカードが機能しない

すべて削除したい.swpファイルを再帰的に。しかしながら:

rm -r *.swp

与える:

rm: cannot remove ‘*.swp’: No such file or directory

念のために、 ls -allは以下を与えます:

total 628
drwxr--r--.  8 przecze przecze   4096 Aug  3 18:16 .
drwxr--r--. 31 przecze przecze   4096 Aug  3 18:14 ..
-rwxrwxr-x.  1 przecze przecze    108 Jul 28 21:41 build.sh
-rwxrwxr-x.  1 przecze przecze 298617 Aug  3 00:52 exec
drwxr--r--.  8 przecze przecze   4096 Aug  3 18:08 .git
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 18:14 inc
-rw-rw-r--.  1 przecze przecze    619 Aug  3 00:52 main.cc
-rw-r--r--.  1 przecze przecze  12288 Aug  3 17:29 .main.cc.swp
-rw-rw-r--.  1 przecze przecze    850 Aug  1 00:30 makefile
-rw-------.  1 przecze przecze 221028 Aug  3 01:47 Nohup.out
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 00:52 obj
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 00:52 out
drwxrwxr-x. 12 przecze przecze   4096 Aug  3 18:14 runs
-rwxr--r--.  1 przecze przecze  23150 Aug  2 18:56 Session.vim
drwxrwxr-x.  2 przecze przecze   4096 Aug  3 18:14 src
-rw-rw-r--.  1 przecze przecze  13868 Jul 31 19:28 tags
-rw-rw-r--.  1 przecze przecze   2134 Aug  3 00:31 view.py
-rw-r--r--.  1 przecze przecze  12288 Aug  3 17:29 .view.py.swp

だから*.swp削除するファイル!そしてrm .build.sh.swpはそのうちの1つを削除しました。何が悪いのですか?

ドットと一致するようにしてください:

$ rm -r .*.swp

これで問題が解決することを願っています。

3
John Goofy

これは、man pageで説明されているBashシェルオプションによって制御されるdotglob機能です。

設定されている場合、bashには「。」で始まるファイル名が含まれます。パス名展開の結果。

Bash機能であるため、greplsなどの他のコマンドは、dotglobも設定されていない場合、.で始まるファイルを処理しません。組み込みのshoptを使用して、システムにdotglobが設定されているかどうかを確認できます。このような問題が発生した場合は、offである必要があります。

$ shopt | grep dotglob
dotglob         off

shoptが設定されている場合、*allファイルと一致します。これらのファイルも.で始まります。次の例をご覧ください。

$ touch a b c .d
$ ls *
a  b  c
$ ls *d
ls: cannot access '*d': No such file or directory
$ shopt -s dotglob
$ shopt | grep dotglob
dotglob         on
$ ls *
.d  a  b  c
$ ls *d
.d

dotglobがオフの場合でも、現在のディレクトリ内のファイルを隠しファイルと一緒に処理するパターンを作成できます。

ls .[!.]* *

または

ls .[^.]* *
2