2008-09-19 160 views
102

假設我有一個目錄/dir其內部有3個符號連接其他目錄 /dir/dir11/dir/dir12/dir/dir13。我想列出dir中的所有文件,包括dir11,dir12dir13中的文件。LINUX遞歸列出目錄中的所有文件,包括在符號鏈接目錄中的文件

更通用的,我想列出包括在其中的符號鏈接的目錄中的那些所有文件。 find .ls -R等停止在符號鏈接而不導航到他們進一步列出。

+0

的可能的複製[如何只使用Linux獲取文件名\`找到\`?](http://stackoverflow.com/questions/5456120/how-to -only-get-file-name-with-linux-find) – 2016-11-25 11:15:04

回答

157

-L選項ls將完成你想要的。它取消了符號鏈接。

所以,你的命令是:

ls -LR 

您還可以

find -follow 

-follow選項指示找到跟隨符號鏈接目錄的做到這一點。

在Mac OS X上使用

find -L 

-follow已被棄用。

+10

-follow在新版本的find中不推薦使用-L。 – pjz 2008-09-19 20:41:19

+0

@pjz:是否有'以下不贊成的交叉引用;使用-L'?有些令我驚訝的是,我確實在http://www.opengroup.org/onlinepubs/009695399/toc.htm找到了'-L'和'-H'的POSIX/SUS標準,更讓我驚訝的是沒有' - 關注',所以我回答了我自己的問題。 – 2008-10-12 23:23:14

+0

這不適合我。首先什麼也沒有發生,然後我試着用'-follow' - 它說它找不到文件夾'ollow' – 2015-04-21 08:04:55

7

使用ls命令:

ls -LR 

從 '人LS':

-L, --dereference 
      when showing file information for a symbolic link, show informa‐ 
      tion for the file the link references rather than for the link 
      itself 

或者使用find:

find -L . 

從查找手冊頁:

-L  Follow symbolic links. 

如果你找到你想要的只是遵循幾個符號鏈接(如也許只是你提到的那些頂層),你應該看看-H選項,其中只有遵循您傳遞給它的命令行符號鏈接。

35
find /dir -type f -follow -print 

-type f意味着它會顯示實時文件(不是符號連接)

-follow意味着它會跟着你的目錄符號鏈接

-print將導致它來顯示文件名。

如果你想有一個LS型顯示器,你可以做以下

find /dir -type f -follow -print|xargs ls -l 
2
ls -R -L 

-L解引用符號鏈接。這也將使得看不到文件的任何符號鏈接 - 它們看起來像指向文件。

97

如何treetree -l將遵循符號鏈接。

免責聲明:我寫了這個包。的 文件到

5
find -L /var/www/ -type l 

# man find 
-L  Follow symbolic links. When find examines or prints information about files, the information used shall be taken from the 

性質的鏈接點,而不是鏈接本身(除非它是一個破碎的符號鏈接或發現無法 檢查文件 該鏈接點)。使用此選項意味着-noleaf。如果以後使用-P選項,-noleaf仍然有效。如果-L爲 ,並且find在其搜索過程中發現了到子目錄的符號鏈接,則將搜索 符號鏈接所指向的子目錄 。

2

我知道tree是合適的,但我沒有安裝樹。所以,我有一個非常密切的替代here

find ./ | sed -e 's/[^-][^\/]*\//--/g;s/--/ |-/' 
相關問題