所有文件夹及其子文件夹清单

22
在Linux中,我想找出所有文件夹/子文件夹的名称并将其重定向到文本文件。
我尝试了 ls -alR > list.txt,但它会给出所有文件和文件夹。

使用 find 命令。find . -type d - lit
3个回答

59

你可以使用find

find . -type d > output.txt

或者tree

tree -d > output.txt

tree,如果您的系统上没有安装。

如果您正在使用Ubuntu

sudo apt-get install tree

如果您正在使用 mac os

brew install tree

在这个选项中,有没有一个选项可以排除单个文件夹...我有一个名为~snapshot的文件夹,我想要排除它? - Sandeep540
找到当前目录下所有名为“~snapshot”的文件夹并将其输出到output.txt文件中。 - Sandeep540
太好了!我们如何按字母顺序排序? - sangorys
1
@sangorys,你可以像这样使用sort命令:find . -type d | sort > output.txt - Adem Öztaş
1
此解决方案未列出软链接子目录。 - SandorRacz
在 MacOS 上,brew 不是标准的工具;您需要单独安装它。 - tripleee

10
find . -type d > list.txt

会列出当前路径下的所有目录和子目录。如果您想列出除当前路径之外的其他路径下的所有目录,请将 . 更改为该其他路径。

如果您想排除某些目录,则可以使用负条件进行过滤:

find . -type d ! -name "~snapshot" > list.txt

我的偏好是“du | less”(或“du | cut -f 2 | less”)...但你的解决方案更好 :) - paulsm4
在这个选项中,有没有一种方法可以排除单个文件夹...我有一个名为~snapshot的文件夹,我想要排除它? - Sandeep540
@Sandeep540 确定。find . -type d ! -name "~snapshot" > list.txt - Amber

3

除了其他答案中列出的 find 外,更好的 shell 还允许递归的 glob 和过滤 glob 匹配项,因此在 zsh 中,例如...

ls -lad **/*(/)

列出所有目录,并保留你想要的所有“-l”细节,否则你需要使用类似以下命令重新创建:
find . -type d -exec ls -ld {} \;

(并不像其他答案所建议的那样容易)

find 命令的好处在于它更独立于 shell - 更加可移植,即使是从 C/C++ 程序中进行 system() 调用等情况也适用。


在这个选项中,有没有一个选项可以排除单个文件夹...我有一个名为~snapshot的文件夹,我想要排除它? - Sandeep540
@Sandeep50:在zsh中,是这样的:setopt EXTENDED_GLOB,然后 ls -lad **/*~**/~snapshot(/)。详情请参阅man zshall/“x〜y(需要设置EXTENDED_GLOB)。匹配与模式x匹配但不与y匹配的任何内容。[...]”。(还有“^x(需要设置EXTENDED_GLOB)。匹配除模式x之外的任何内容。[稍微不同语法及示例的进一步解释]”) - Tony Delroy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接