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 次 |
最近记录: |