我想.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
它会导致其他命令(例如grep
等ls
)不处理以 开头的文件。.
您可以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 .[^.]* *