Wildcards
如何查找除指定文件之外的所有文件
ls
可以給出類似的結果[root@localhost ~]# cd /etc/yum.repos.d/ [root@localhost yum.repos.d]# ls
CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo
但實際上我希望只是找出來,
CentOS-Base.repo
但不是。所以我執行這個命令CentOS-Debuginfo.repo``CentOS-Vault.repo``CentOS-Media.repo
ls [^\(Media\)]
但是我得到一個錯誤資訊。我該怎麼辦?
在最簡單的情況下,您可以使用以下內容(如果第一個子詞是 static
CentOS
):ls CentOS-[BDV]*
[BDV]
- 確保第二個子詞以指定字元之一開頭的字元類或與否定相同:
ls CentOS-[^M]*
如果您想忽略所有包含該
M
字元的文件名,使用 GNU 實現ls
(通常在 CentOS 上找到),請使用-I
(--ignore
) 選項:ls -I '*M*'
-I, –ignore = PATTERN
不列出與 shell PATTERN匹配的隱含條目要忽略帶有
Media
單詞的條目:ls -I '*Media*'
這些模式需要逐字傳遞給
ls
,因此必須被引用(否則,shell 會將它們視為要擴展的 glob)。
一些 shell 具有否定萬用字元:
zsh -o extendedglob
:ls -d -- ^*Media* ls -d -- *.repo~*Media* # ~ is "except" operator
ksh
,zsh -o kshglob
,bash -O extglob
:ls -d -- !(*Media*)
bash
:GLOBIGNORE='*Media*' ls -d -- *
ksh
:FIGNORE='@(*Media|.)*' ls -d -- *