递归查找目录但不打印匹配的子目录

递归查找目录但不打印匹配的子目录

考虑以下目录结构:

dir1
  [domain.com] foo dir1
    subdir1
  subdir2
    FooFile
dir2
  [domain.com] foo dir2
  subdir3
    [domain.com] foo dir3
      subdir4
      subdir5
    subdir6
  subdir7
[domain.com] foo dir4
  subdir8

我想列出名称包含[domain.com].期望的输出:

[domain.com] foo dir1
[domain.com] foo dir2
[domain.com] foo dir3
[domain.com] foo dir4

我很难把这些放在一起。我最接近的:

find . -type d -regextype posix-egrep -regex ".*/(\[domain\.com\]).+" -exec basename {} \;

但这也输出子目录:

[domain.com] foo dir3
subdir5
subdir4
[domain.com] foo dir2
[domain.com] foo dir4
subdir8
[domain.com] foo dir1
subdir1

答案1

因为看起来你已经找到了 GNU,所以这应该足够了:

find . -type d -name '\[domain.com\]*' -printf '%f\n'

GNUfind-printf操作可以只打印匹配文件的基本名称%f

您的正则表达式的问题是它允许任何之后的内容[domain.com]- 甚至是/, 因此匹配子目录。".*/(\[domain\.com\])[^/]+"可能会解决这个问题。

相关内容