我在使用 ls 指令、檔案通配和 grep 指令時遇到問題。考慮以下檔案/目錄樹。
abc/
def
ghi.txt
jkl
def/
f01
abc
abc.txt
ghi.txt
假設如果我想完全忽略 abc/ 目錄並報告其他所有內容。嘗試ls -lR -Iabc .
確實報告 /def/abc.txt 檔案但忽略該/def/abc
檔案。同樣ls -lR . | grep -v abc
這裡也不行。有辦法在 bash 中做我想做的事嗎?
或者,假設我想忽略ghi.txt
但報告abc/ghi.txt
.有什麼辦法可以在 bash 中做到這一點嗎?
答案1
在 bash 中,如果啟用了擴充通配符,則可以使用 !(abc) 來反向匹配目錄abc
。前任。給定
$ tree
.
├── abc
│ ├── def
│ ├── ghi.txt
│ └── jkl
├── def
│ ├── abc
│ ├── abc.txt
│ └── f01
└── ghi.txt
2 directories, 7 files
和
$ shopt extglob
extglob on
然後
$ ls !(abc)
ghi.txt
def:
abc abc.txt f01