2013-11-28 93 views
1

在Linux中給定的目錄樹,我想列出:使用Linux find命令查找目錄和符號鏈接目錄

  • 所有目錄,
  • 所有符號鏈接目錄
  • 不是目錄通過遵循符號鏈接找到。

考慮一個空目錄,然後執行

mkdir a 
mkdir a/b 
ln -s a c 
echo "x" > f1 
ln -s f1 f2 

然後find . -type d

. 
./a 
./a/b 

,因此錯過了符號鏈接./c,wheras find . -type l

./c 
./f2 

該錯過的目錄../a./a/b,另外打印符號鏈接./f2這不是一個符號鏈接到一個目錄,而是一個文件。

回答

2

你可以說:

while read -r name; do 
    [ -d "$name" ] && echo "$name"; 
done < <(find .) 
+0

@HåkonHægland查看上面的修改信息。似乎單靠「發現」不足以達到預期的結果。 – devnull

+0

似乎工作是的..非常感謝! –

4

使用-H選項:

導致文件信息和文件類型(請參閱stat(2))返回在命令行上指定的每個符號鏈接爲 那些由鏈接引用的文件,而不是鏈接本身。如果引用的文件不存在,則文件信息和類型將用於鏈接本身。所有不在命令行上的符號鏈接的文件信息都是鏈接本身的鏈接。

所以:

find -H . -type d 

將列出目錄和鏈接目錄。

+0

不起作用... –

+0

嗯,看起來像版本依賴。我引用的文檔來自OS X中的BSD版本。但是在Linux中的GNU查找是不同的。 – Barmar

+3

GNU查找具有'-L',但它也通過鏈接指向目錄。 – Barmar

相關問題