Find

如何根據適用於文件路徑名的表達式查找目錄(或文件等)

  • July 22, 2020

我正在嘗試根據適用於文件路徑的表達式查找/提取目錄。例如,我使用了以下命令:

find . -type d -links 2

要獲取如下所示的目錄列表:

./foo/ABC/W
./foo/ABC/X
./foo/ABC/Y
./foo/ABC/Z
./foo/BCD/W
./foo/BCD/X
./foo/BCD/Y
./foo/BCD/Z
./foo/CDE/W
./foo/CDE/X
./foo/CDE/Y
./foo/CDE/Z
./bar/CDE/V
./bar/CDE/Q
./bar/BCD/V
./bar/BCD/Q
./bar/ABC/V
./bar/ABC/Q

我想知道如何獲取此列表,並僅提取其中包含“CDE”的文件路徑:

./foo/CDE/W
./foo/CDE/X
./foo/CDE/Y
./foo/CDE/Z
./bar/CDE/V
./bar/CDE/Q

這是我到目前為止嘗試過的,當我嘗試時它什麼也沒輸出:

find . -type d -links 2 -name "CDE" -print
$ find . -type d -links 2 -path '*CDE*'
./foo/CDE/X
./foo/CDE/Z
./foo/CDE/W
./foo/CDE/Y
./bar/CDE/Q
./bar/CDE/V

或使用

find . -type d -links 2 -path '*/CDE/*'

如果您知道CDE要查找的路徑中間某處的子目錄的名稱。

find . -type d -links 2 -name "CDE" -print

匹配基本名稱完全正確CDE(因為-name CDE)並且沒有子目錄(因為-links 2)的目錄。

/文件的基本名稱就在其路徑的最後一位之後。例如,基本名稱./foo/CDE/WW。從這裡您可以看到沒有一個目錄符合這兩個條件。

你在追求

find . -type d -links 2 -path '*/CDE/*'

-path pattern選項為真,如果

目前路徑名使用模式匹配表示法中描述的模式匹配表示法匹配模式。

在“模式匹配表示法”中,星號匹配任何字元串。

最後一點,-print除非-ok-exec存在,否則預設使用,因此您可以刪除它。

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