Bash
從匹配目錄中查找一級深的目錄列表
我正在嘗試獲取包含在特定文件夾中的目錄列表。
鑑於這些範例文件夾:
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/ 中的文件夾
Using
find
讓我最接近,但我不能使用-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
,bash
,yash
儘管通常在某些選項下),(/)
僅選擇目錄類型的文件,D
包括隱藏(點)文件:t
,獲取尾部(文件名)。