【问题标题】:Unexpected behavior of "**/*" (double star) on grepgrep 上“**/*”(双星)的意外行为
【发布时间】:2017-10-23 06:40:57
【问题描述】:

我遇到了与 grep 相关的双星问题。 我正在使用 ubuntu 16.04。

据我了解(经过大量研究): grep 'a' **/* 应该在我的目录和所有子目录的所有文件中找到任何出现的“a”(递归)。

但是,它在我的系统中不能这样工作。 这是一个测试: 我的文件目录 .a(包含“a”的文件) ba/a(包含“in ba”的文件) ba/ca/a(包含“in ca in ba”的文件)

 grep 'a' *
 a:a
 ba is a directory

 grep 'a' **/*
 ba/a:in ba
 grep: ba/ca: is a directory

第一种情况很明显,但我期待从第二种情况中看到三个文件......

这背后的解释是什么?

谢谢, 鲍勃

【问题讨论】:

  • 你的 grep 版本是多少? grep --version
  • 我没想到...对于复杂的包版本控制,这是我的第一个反应,但我一无所知!我的版本是2.24,我会升级到3.0再检查一遍。

标签: recursion grep


【解决方案1】:

grep 不与双星“关联”。你的 shell 扩展了这些。

根据您使用的 shell 以及您在该 shell 中的设置,双星可能意味着展开任意数量的子目录级别。

如果要递归 grep,请使用 grep -r,如 grep -r a .

【讨论】:

  • 这似乎是合理的。但是,使用 */ 的优点是指定文件名的模式。有没有简单的解决方案(不使用 find + grep)来解决这个问题?感谢您的宝贵时间
  • 嗯,不,您要么需要使用find,要么从执行所需操作的shell 运行命令,例如zshbash
  • 对于 bash,您需要将globstar 设置为:shopt -s globstar,请参阅stackoverflow.com/questions/28176590/…
  • 感谢您,我现在已经激活了 globstar,它可以工作了!
  • 当然有。检查grep --include--include-dir--exclude--exclude-dir
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
  • 2015-02-02
  • 1970-01-01
  • 2020-09-16
  • 1970-01-01
  • 2017-11-30
  • 1970-01-01
相关资源
最近更新 更多