是否可以在 ls 或檔案通配中忽略特定檔案或目錄?

是否可以在 ls 或檔案通配中忽略特定檔案或目錄?

我在使用 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

相關內容