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 時,因為使用 . 時都會出現.
(目前目錄)和..
(父目錄)*
。有了dotglob
套裝,絕不嘗試使用rm -R *
.
答案2
作為一個擴大對於 Shaido 的回答,我想解釋為什麼該-a
選項在這裡不起作用:
該ls
命令確實不是處理通配符。命令列解釋器執行此步驟:
如果您鍵入命令列“ ”,命令列解釋器將首先用匹配文件列表mycommand *.c
替換通配符字串“ ”,然後執行生成的命令行:*.c
mycommand a.c file.c test.c
命令列解釋器對所有命令都以相同的方式工作,因此它無法知道-a
在命令的情況下這意味著“包括隱藏文件” ls
(而-a
對其他命令具有完全不同的含義)...