Shell

遞歸查找目錄但不列印匹配的子目錄

  • April 3, 2019

考慮以下目錄結構:

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

因為看起來你有 GNU find,這應該足夠了:

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

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

您的正則表達式的問題在於它允許在[domain.com]- 甚至 a之後進行任何操作/,因此匹配子目錄。".*/(\[domain\.com\])[^/]+"可能會解決這個問題。

引用自:https://unix.stackexchange.com/questions/510205