如何解决grep中的--exclude-dir选项无法正常工作
在使用grep
时,如以下命令所示,我试图排除多个目录
grep -r --exclude-dir={folder1,folder2} 'foo'
但是,会引发错误grep: foo: No such file or directory
。也许我在--exclude-dir
选项上做错了,因为下面的命令按预期工作了
grep -r 'foo'
如何正确使用--exclude-dir
选项?预先感谢。
解决方法
GNU grep的--exclude-dir
标志采用 glob 表达式作为参数。然后,具有多于项的glob表达式将成为括号扩展序列,该扩展序列将被外壳扩展。
扩展涉及用逗号分隔的单词,并且不喜欢单词之间的空格。所以理想情况下应该是
--exclude-dir={folder1,folder2}
通过运行,您可以将其视为Shell中的简单括号扩展
echo {a,b} # produces 'a b'
echo {a,b} # this doesn't undergo expansion by shell
echo --exclude-dir={folder1,folder2}
--exclude-dir={folder1,folder2}
因此,您的原始命令变为
grep -r '--exclude-dir={folder1,' 'folder2}' foo
即exclude-dir接受未扩展的glob扩展字符串,因为{folder1,'
和'folder2}'
成为您要搜索的内容,而foo
则成为多余的多余参数,{ {1}}不喜欢引发命令行解析错误。
记住括号扩展是shell的功能(例如grep
),而不是bash
。在不支持该功能的Shell中,将按原样对待将目录放在grep
之间,
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。