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

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つを正常に削除しました。私は何が間違っていましたか?

答え1

ポイントマッチングを試してみてください:

$ rm -r .*.swp

これがあなたの問題を解決することを願っています。

答え2

この機能は、以下に説明するようにBashシェルオプションによって制御されます。dotglobman page

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

機能なので、dotglobを設定しないと、他のコマンド(etcなど)がdotglobで始まるファイルを処理できなくなりますBash。内蔵のshoptを使用して、この設定がシステムに設定されていることを確認できます。この種の問題がある場合は、次のようにする必要があります。grepls.dotgloboff

$ shopt | grep dotglob
dotglob         off

shopt設定が*一致した場合みんな.この例を見てください:

$ 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 .[^.]* *

関連情報