【问题标题】:find recursively, but with specific sub-folder name递归查找,但具有特定的子文件夹名称
【发布时间】:2019-05-28 18:04:37
【问题描述】:

此命令递归查找当前文件夹中所有名为“log_7”的文件。

find . -name log_7

假设当前文件夹树下的许多子文件夹都有一个同名文件“log_7”:

./am/f1/log_7
./ke/f2/log_7
./sa/f6/log_7
..
./xx/f97/log_7 

有没有办法明确地说我们只想在文件夹名称“f2”中搜索“log_7”?这样find 的结果将只列出一个条目:

./ke/f2/log_7

【问题讨论】:

  • 也许使用正则表达式,例如find . -regex '.*/f2/log_7'。仅当log_7 直接嵌套在f2 下时才会匹配
  • @artm 您可以尝试使用正则表达式来命名 */f2/log_7
  • @tmcnicol 现场,您想将您的评论转换为答案,将接受它。
  • @tkhurana96 也感谢你;正则表达式是美丽的;)
  • 非常感谢

标签: linux bash


【解决方案1】:

您可以使用正则表达式。

find . -regex '.*/f2/log_7'

只有当 log_7 直接嵌套在 f2 下时才会匹配

【讨论】:

    【解决方案2】:

    有一种不同的方法是使用 xargs 来做同样的事情

    find . -name filename | xargs grep -e refectory
    

    但最好使用内置正则表达式查找。

    【讨论】:

    • 如果要搜索的模式包含在目录名称中(作为子字符串),这将失败。
    【解决方案3】:

    简单的 glob 应该这样做:

    printf '%s\n' */f2/log_7
    

    如果有更多前导文件夹的可能性,您可以使用globstar 选项:

    shopt -s globstar
    printf '%s\n' **/f2/log_7
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-21
      • 1970-01-01
      • 1970-01-01
      • 2011-04-08
      • 2012-11-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多