Bash

從匹配目錄中查找一級深的目錄列表

  • July 17, 2017

我正在嘗試獲取包含在特定文件夾中的目錄列表。

鑑於這些範例文件夾:

foo/bar/test
foo/bar/test/css
foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI

我想要一個將返回的命令:

XYZ
ABC
DEF
GHI

本質上,我正在尋找 wp-content/plugins/ 中的文件夾

Usingfind讓我最接近,但我不能使用-maxdepth,因為該文件夾與我正在搜尋的位置不同。

執行以下以遞歸方式返回所有子目錄。

find -type d -path *wp-content/plugins/*

foo/bar/wp-content/plugins/XYZ
foo/bar/wp-content/plugins/XYZ/js
foo/bar/wp-content/plugins/XYZ/css
baz/wp-content/plugins/ABC
baz/wp-content/plugins/ABC/inc
baz/wp-content/plugins/ABC/inc/lib
baz/wp-content/plugins/DEF
bat/bar/foo/blog/wp-content/plugins/GHI

只需添加一個-prune,以便找到的目錄不會下降到:

find . -type d -path '*/wp-content/plugins/*' -prune -print

你需要引用它,*wp-content/plugins/*因為它也是一個 shell glob。

如果您只想要目錄名稱而不是它們的完整路徑,則可以使用 GNU替換find或假設文件路徑不包含換行符,將上述命令的輸出通過管道傳輸到僅有效字元)。-print``-printf '%f\n'``awk -F / '{print $NF}'``sed 's|.*/||'

zsh

printf '%s\n' **/wp-content/plugins/*(D/:t)

**/是任何級別的子目錄(起源於zsh早期夜間的功能,現在可以在大多數其他 shell 中找到,如ksh93, tcsh, fish, bashyash儘管通常在某些選項下),(/)僅選擇目錄類型的文件,D包括隱藏(點)文件:t,獲取尾部(文件名)。

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