基本上我可以在 zsh 中使用 glob 到一个列表。通常,事实证明,我想过滤该列表,但我很想知道,是否需要这样做。
zsh 有过滤列表的方法吗?我担心这是一个显而易见的问题,但从心理上来说,今天是低收益日。
Gil*_*il' 16
这是一个奇怪的问题,因为 zsh 是唯一具有此功能的 shell。它被称为glob 限定符。与往常一样,该手册相当简洁且没有示例。该岩组爱好者页面有几个例子。谷歌搜索zsh "glob qualifiers"出现了一些博客文章和教程。你也可以"glob qualifier"在这个网站上搜索。
基础知识:glob 限定符位于 glob 末尾的括号中。最有用的是标点符号,用于仅选择某些文件类型。
echo *(/) # directories
echo *(.) # regular files
echo *(@) # symbolic links
echo *(-/) # directories and symbolic links to directories
Run Code Online (Sandbox Code Playgroud)
还有其他限定符可以过滤元数据,例如大小、日期和所有权。
# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)
Run Code Online (Sandbox Code Playgroud)
Glob 限定符还可以控制匹配的顺序,并限制匹配的数量。
echo *(Om[1,10]) # The 10 oldest files
Run Code Online (Sandbox Code Playgroud)
您可以通过调用带有+限定符的函数来设置任意过滤器(e如果您不介意棘手的引用,您甚至可以将代码与限定符内联)。
请注意,不幸的是,所有这些仅适用于 globs。如果要以这种方式构建文件名列表,则需要在进行 globbing 时进行过滤。如果要过滤已经构建的列表,则有完全不同的语法,参数扩展 flags,它只能执行简单的文本过滤 ( "${(@)ARRAY:#PATTERN}")。
| 归档时间: |
|
| 查看次数: |
2282 次 |
| 最近记录: |