zsh glob限定符可以排除二进制文件

zsh glob限定符可以排除二进制文件,第1张

概述我正在寻找当前目录和所有子目录中包含字符串“abc”的文件: grep abc **/*(.) 输出包含如下行: ...Binary file test.pdf matches... 是否可以在glob限定符中排除二进制文件? 编辑:这里使用grep只是一个例子.我有兴趣通过zsh globbing限定符排除二进制文件,而不是在适当的grep选项中. 消息“二进制文件test.pdf匹配”不是 我正在寻找当前目录和所有子目录中包含字符串“abc”的文件:

grep abc **/*(.)

输出包含如下行:

...Binary file test.pdf matches...

是否可以在glob限定符中排除二进制文件?

编辑:这里使用grep只是一个例子.我有兴趣通过zsh globbing限定符排除二进制文件,而不是在适当的grep选项中.

解决方法 消息“二进制文件test.pdf匹配”不是由zsh打印,而是由grep本身打印.

原因是大多数情况下,如果你打印包含模式的二进制文件的行,它将打印也打印“垃圾”(即不可打印的字符,真正的长行等).

在您的示例中,** / *(.)是zsh扩展.
你可以用echo检查扩展到的内容:

$echo **/*(.)

请注意,** / *(.)与顶部目录中带有点的文件不匹配.

$mkdir test$cd test$touch .mytest$echo  **/*(.)zsh: no matches found: **/*(.)

现在,如果你想在当前目录中递归地找到包含某种模式的文件,那么有一种非常简单的方法:

$grep -rI .

如果要忽略当前目录中以点开头的文件:

$grep -r *

关于使用zsh globbing过滤掉二进制文件.
这是zshexpn(1)的一部分:

A qualifIEr may be any one of the following:   /      directorIEs   F      `full'  (i.e.  non-empty)  directorIEs.     .      plain files   @      symbolic links   =      sockets   (...)

请注意,虽然手册中说“普通文件”,但并不意味着“纯文本文件”.
它意味着常规文件.

AFAIK,如果内容是二进制文件,则zsh无法选择基于文件的文件.

在使用globbing时,Zsh不会读取文件的内容,因此它可以使用可用的文件系统元数据.

因此,如果zsh实现了这个功能,那么整合时间将比目前可用的通用时间慢得多(当然,除非文件系统实现了“标记”二进制文件的方式,否则IMO不太可能).

您可以尝试使用执行标志过滤掉文件,但这将非常不精确(即可执行脚本会退出,并且不可执行的二进制文件会进入).

这个任务更适合grep本身,因为无论如何他都会读取文件.

总结

以上是内存溢出为你收集整理的zsh glob限定符可以排除二进制文件全部内容,希望文章能够帮你解决zsh glob限定符可以排除二进制文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1023631.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存