在 OSX(big sur -so Zhell)上,我有一个包含 .bundle 文件的文件夹,每个包包含多个文件和文件夹。大多数文件都有一个名为 PNG_.zip 的资源,有些则没有。
所以如果我运行这个:
find ~/Desktop/test -name "PNG_.zip"
它将输出包含 PNG_.zip 的任何内容。
然而我想找到所有的项目不包含 PNG_.zip我怎样才能做到这一点?
谢谢!
答案1
使用 zsh全局限定符,假设捆绑包是目录。
首先,以下是如何在当前目录下的任何位置查找包目录:
print -rC1 -- **/*.bundle(/N)
**/…
匹配嵌套子目录中的文件。(/)
将匹配限制为目录。(N)
结果是一个空列表,而不是在没有匹配项时出错。
然后过滤结果以仅保留捆绑包而不保留PNG_.zip
任何地方:
print -rC1 -- **/*.bundle(/Ne['()(($#==0)) $REPLY/**/PNG_.zip(NDY1)'])
(e['…'])
过滤匹配项:仅保留表达式为 true 的匹配项。该代码会针对每场比赛依次执行,并$REPLY
设置为比赛。()(($#==0)) …
测试是否…
扩展为长度为 0 的单词列表,即…
(作为单词列表)是否为空。(Y1)
是一种优化,一旦找到 1 个匹配就停止遍历目录。(D)
( ) 还可以在包目录的隐藏子目录中dotglob
查找文件。PNG_.zip
答案2
我相信:
$ find . -type f \( ! -iname "*PNG_.zip*" \)
确实有窍门。 !运算符否定搜索模式。所以你会得到所有不匹配的文件。