递归列出目录中的所有文件,包括symlink目录中的文件


147

假设我有一个目录/dir中,其中有3个符号连接其他目录 /dir/dir11/dir/dir12/dir/dir13。我想列出中的所有文件dir,包括在那些dir11dir12dir13

为了更通用,我想列出所有文件,包括目录中的符号链接文件。find .ls -R等停止在符号链接上,而无需导航到它们以进一步列出。


Answers:


232

-L选项ls将完成您想要的。它取消引用符号链接。

因此,您的命令将是:

ls -LR

您也可以使用

find -follow

-follow选项指示find跟随符号链接到目录。

在Mac OS X上使用

find -L

-follow已弃用。


14
在较新版本的find中,不推荐使用-follow,而推荐使用-L。
pjz

@pjz:是否有“ -follow已弃用”的交叉引用;使用-L'?令我大吃一惊的是,我确实在opengroup.org/onlinepubs/009695399/toc.htm的POSIX / SUS标准中找到了“ -L”和“ -H” ,更令人惊讶的是没有“ -follow”,所以我回答了我自己的问题。
乔纳森·莱夫勒

这对我不起作用。首先什么都没有发生,然后我尝试了-follow-它说它找不到文件夹ollow
smatthewenglish

4
在OS X 10.10上,它的工作原理是:find -L .—我遇到了与@ S.Matthew_English相同的问题
fregante 2015年

您的回答很好,但是我follow只希望文件路径(文件的完整路径)而不是目录路径,我该怎么办?
Vicky Dev


46
find /dir -type f -follow -print

-type f 表示它将显示真实文件(不是符号链接)

-follow 表示它将遵循您的目录符号链接

-print 将导致它显示文件名。

如果要显示ls类型,可以执行以下操作

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

这会产生比ls -L选项更漂亮的显示
eusoubrasileiro

10

使用ls:

  ls -LR

来自“ man 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 -L .

从查找手册页:

-L     Follow symbolic links.

如果发现只想跟随几个符号链接(例如您刚才提到的顶级链接),则应查看-H选项,该选项仅跟随在命令行中传递给它的符号链接。


5

我知道这tree是合适的,但是我没有安装树。所以,我这里有一个非常接近的替代者

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

这正是我所需要的。谢谢。
Scott C

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
ls -R -L

-L取消引用符号链接。但是,这也将使得无法看到文件的任何符号链接-它们看起来像指向的文件。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.