Shell
遞歸查找目錄但不列印匹配的子目錄
考慮以下目錄結構:
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'
GNU
find
的-printf
操作可以只列印匹配文件的基本名稱%f
。您的正則表達式的問題在於它允許在
[domain.com]
- 甚至 a之後進行任何操作/
,因此匹配子目錄。".*/(\[domain\.com\])[^/]+"
可能會解決這個問題。