是否可以在 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

相关内容