Wildcards

如何查找除指定文件之外的所有文件

  • July 2, 2017

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 -- *

引用自:https://unix.stackexchange.com/questions/372952