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

尝试匹配点:

$ rm -r .*.swp

我希望这能解决您的问题。

答案2

它的Bash功能由 shell 选项控制,dotglob如下所述man page

如果设置,bash 包含以“.”开头的文件名在路径名扩展的结果中。

由于它是一项功能,因此如果未设置 dotglob,Bash它会导致其他命令(例如grepls )不处理以 开头的文件。.您可以dotglob使用内置的shopt检查您的系统上是否设置了此设置,off如果您遇到此类问题,则一定是这样:

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

相关内容