【问题标题】:Recursively list all files in a directory including files in symlink directories递归列出目录中的所有文件,包括符号链接目录中的文件
【发布时间】:2010-09-11 10:29:49
【问题描述】:

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

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

【问题讨论】:

标签: linux


【解决方案1】:

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

所以你的命令是:

ls -LR

您也可以使用

find -follow

-follow 选项指示 find 遵循指向目录的符号链接。

在 Mac OS X 上使用

find -L

-follow 已被弃用。

【讨论】:

  • -follow 在较新版本的 find 中已弃用,取而代之的是 -L。
  • @pjz: 是否有'-follow deprecated的交叉引用;使用-L'?令我相当惊讶的是,我确实在opengroup.org/onlinepubs/009695399/toc.htm 的 POSIX / SUS 标准中找到了“-L”和“-H”,更令我惊讶的是没有“-follow”,所以我回答了我自己的问题。
  • 这对我不起作用。首先什么也没发生,然后我尝试使用-follow- 它说找不到文件夹ollow
  • 在 OS X 10.10 上可以使用:find -L . — 我遇到了和 @S.Matthew_English 相同的问题
  • 你的回答很好,但我只想follow 文件路径(文件的完整路径)而不是目录路径,我该怎么做?
【解决方案2】:

使用 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 选项,它只跟随您传递给的符号链接它在命令行上。

【讨论】:

    【解决方案3】:
    find /dir -type f -follow -print
    

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

    -follow 表示它将跟随您的目录符号链接

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

    如果你想要一个 ls 类型的显示,你可以这样做

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

    【讨论】:

    • 这会产生比ls -L 选项更漂亮的显示
    【解决方案4】:
    ls -R -L
    

    -L 取消引用符号链接。不过,这也将导致无法看到文件的任何符号链接 - 它们看起来就像指向的文件。

    【讨论】:

      【解决方案5】:

      tree 怎么样? tree -l 将跟随符号链接。

      免责声明:我写了这个包。

      【讨论】:

      • 拱形包怎么样?
      • 这是一个比ls 更直观的视图。它也更容易粘贴。
      【解决方案6】:
      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
      

      属性 链接指向的文件,而不是链接本身(除非它是损坏的符号链接或 find 无法找到 检查文件以 链接指向)。使用此选项意味着 -noleaf。如果您稍后使用 -P 选项,-noleaf 仍将有效。如果 -L 是 实际上,find 在搜索过程中发现了指向子目录的符号链接,该子目录由 符号链接将 被搜索。

      【讨论】:

        【解决方案7】:

        我知道tree 是合适的,但我没有安装树。所以,我得到了一个非常接近的替代 here

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

        【讨论】:

        • 这正是我所需要的。谢谢。
        【解决方案8】:

        如果您想打印所有文件内容find . -type f -exec cat {} +

        【讨论】:

          猜你喜欢
          • 2013-05-17
          • 2010-10-19
          • 1970-01-01
          • 2020-10-07
          • 2018-05-02
          • 2021-07-06
          • 2010-10-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多