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