我正在尝试里面ls有.png文件的目录(不需要递归,尽管它会额外有用),第一个。排除一个目录即
ls */*.png
工作良好。
ls (^one)*/*.png
不返回任何标准输出。我该如何实现?
我是盲人,并将其传送到espeak,所以现在我只能听到stdout。
我正在尝试里面ls有.png文件的目录(不需要递归,尽管它会额外有用),第一个。排除一个目录即
ls */*.png
工作良好。
ls (^one)*/*.png
不返回任何标准输出。我该如何实现?
我是盲人,并将其传送到espeak,所以现在我只能听到stdout。
Answers:
选项1-仅使用ls:
在扩展的bash锁定启用(shopt -s extglob)的情况下,您可以执行以下操作:
ls !(one*)/*.png
选项2-合并ls和grep:
您可以ls与grep -v
ls */*.png | grep -v "one/"
选项3-(最佳IMO),但find不使用ls:
用于使用递归搜索所有子目录 find
find . -type f -name "*.png" -not -path "*/one/*"
以上所有一线代码都将列出带有.png文件的目录,同时过滤掉所有匹配的路径one/;只有选项3会递归执行此操作。
find命令不需要说-path "*/one/*"还是-path "./one/*"?
./phone/handset.png吗?
.png目录中的s有什么问题phone?我以为我们只是想排除one?
-not,这意味着它会导致find排除目录中名为的文件phone。
在zsh中,放入setopt extended_glob您的~/.zshrc。然后,您可以使用通配符模式 ^one排除名为的目录one。
ls ^one/*.png
如果要递归到子目录,请使用**/递归glob。要排除one在顶层调用的目录以及顶层目录:
ls ^one/**/*.png
要排除名为的子目录中的文件one,而不排除其子目录中的文件,请执行以下操作:
ls **/^one/*.png
要排除one在任何级别调用的子目录下的文件,请对#运算符使用否定重复模式:
ls (^one/)#/*.png
one(正确的模式是^one/*.png),它将打印所有内容。