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限定符可以排除二进制文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)