如何在zsh中过滤glob

Modified on: Sat, 30 Jun 2018 04:54:00 +0800

基本上我可以在zsh中使用glob到列表。通常情况下,事实证明,我想过滤那个列表,但是我很想知道,如果我需要这样做的话。

zsh是否有过滤列表的方法?我担心这是一个显而易见的问题,但今天是精神上的低收益日。

最佳答案

这是一个奇怪的问题,因为zsh是唯一具有此功能的shell。它被称为全球限定词。像往常一样,手册相当简洁,没有例子。 Zsh-lovers页面有几个例子。 Google搜索zsh "glob qualifiers"出现一些博客文章和教程。您还可以在此网站上搜索"glob qualifier"

基础知识:glob限定符位于glob末尾的括号中。最有用的是标点符号,只选择某些文件类型。

echo *(/)      # directories
echo *(.)      # regular files
echo *(@)      # symbolic links
echo *(-/)     # directories and symbolic links to directories

还有其他限定符可以过滤元数据,例如大小,日期和所有权。

运行zsh的用户拥有的

# files owned by the user running zsh, over 1MB, last modified more than 7 days ago
echo *(ULm+1m+7)

Glob限定符还可以控制匹配的顺序,并限制匹配的数量。

echo *(Om[1,10])     # The 10 oldest files

您可以通过使用+限定符调用函数来设置任意过滤器(如果不这样做,您甚至可以将代码与e限定符一起内联注意棘手的引用。)

请注意,遗憾的是,所有这些仅适用于globs。如果要以这种方式构建文件名列表,则需要在进行通配时进行过滤。如果你想过滤你已经建立的列表,那么语法就完全不同了,参数扩展标志,只能执行简单的文本过滤("${(@)ARRAY:#PATTERN}")。

作者:Community,Gilles

相关问答

添加新评论