Tom*_*kus 13 ls shell wildcards
我正在尝试使用里面ls有.png文件的目录(不需要递归,尽管它会特别有用),除了一个。排除一个目录即
ls */*.png
Run Code Online (Sandbox Code Playgroud)
工作正常。
ls (^one)*/*.png
Run Code Online (Sandbox Code Playgroud)
不返回标准输出。我如何实现它?
我是瞎子,用管道把它传到espeak,所以我现在只能听到标准输出。
tox*_*efa 16
选项 1 - 仅使用ls:
打开扩展 bash globbing ( shopt -s extglob) 您可以执行以下操作:
ls !(one*)/*.png
Run Code Online (Sandbox Code Playgroud)
选项 2 - 结合ls和grep:
您可以结合ls使用grep -v
ls */*.png | grep -v "one/"
选项 3 -(最好的 IMO)但find不使用ls:
使用递归搜索所有子目录 find
find . -type f -name "*.png" -not -path "*/one/*"
Run Code Online (Sandbox Code Playgroud)
以上所有单行程序都会列出包含.png文件的目录,同时过滤掉任何匹配的路径one/;只有选项 3 会递归地执行此操作。
在zsh 中,放入setopt extended_glob您的~/.zshrc. 然后您可以使用通配符模式 ^one排除名为one.
ls ^one/*.png
Run Code Online (Sandbox Code Playgroud)
如果要递归到子目录,请使用**/递归通配符。要排除one在顶层调用的目录以及顶层目录:
ls ^one/**/*.png
Run Code Online (Sandbox Code Playgroud)
要排除名为 的子目录中的文件one,但不排除其子目录中的文件:
ls **/^one/*.png
Run Code Online (Sandbox Code Playgroud)
要排除one在任何级别调用的子目录下的文件,请使用重复模式和#否定周围的运算符:
ls (^one/)#/*.png
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10250 次 |
| 最近记录: |