ls -al .functions*
-rw-r--r-- 1 root root 471040 Mar 2 10:01 .functions.php.swo
-rw-r--r-- 1 root root 438272 Mar 2 09:57 .functions.php.swp
*
可以匹配.php.swo
和.php.swp
为什么*
不能匹配.functions.php
?
ls -al *.swo
ls: cannot access '*.swo': No such file or directory
ls -al *swo
ls: cannot access '*swo': No such file or directory
答案1
默认情况下,以点开头的文件在文件列表中是隐藏的。匹配此类文件的最简单方法是在表达式的开头放置一个点。但是,这只会匹配以 开头的文件.
。
ls -al .*.swo
dotglob
另一种方法是在运行命令之前设置,然后以开头的文件.
将被包含在内。
shopt -s dotglob
将其添加到您的~/.bashrc
默认设置中。
注意设置dotglob
可能会导致意想不到的结果使用 bash shell 时,因为使用 时将同时出现.
(当前目录) 和(父目录) 。使用set,..
*
dotglob
绝不尝试使用rm -R *
。
答案2
作为扩大对于 Shaido 的回答,我想解释一下为什么该-a
选项在这里不起作用:
该ls
命令确实不是处理通配符。命令行解释器执行以下步骤:
如果您输入命令行“ ”,命令行解释器将首先用匹配的文件列表mycommand *.c
替换通配符字符串“ ”,然后执行生成的命令行:*.c
mycommand a.c file.c test.c
命令行解释器对所有命令的工作方式都相同,因此它无法知道该命令的-a
含义是“包括隐藏文件” ls
(而-a
对于其他命令则具有完全不同的含义)...