递归列出所有目录和文件。

56

我希望收到如下输出:

假设文件系统上的目录结构如下:

  -dir1
      -dir2
        -file1
        -file2
             -dir3
                -file3
                -file4
            -dir4
                -file5
       -dir5
             -dir6
             -dir7

脚本的输出必须如下:

目录:

/dir1
/dir1/dir2
/dir1/dir2/dir3
/dir1/dir2/dir4
/dir1/dir5
/dir1/dir5/dir6
/dir1/dir5/dir7

文件:

/dir1
/dir1/dir2/file1
/dir1/dir2/file2
/dir1/dir2/dir3/file3
/dir1/dir2/dir3/file4
/dir1/dir2/dir4/file5
/dir1/dir5/dir6
/dir1/dir5/dir7

您能告诉我如何将 find . -type dfind . -type f 的输出保留到另一个文件中吗?


1
哦,有一个不一致的地方,你的文件输出中列出了dirs。这不是错误吗? - Kent Fredric
大家好,我使用Unix/AIX - Korn Shell。如果有什么不妥之处请见谅。我是这个领域的新手。 - Christopher
7个回答

90

在Windows中,仅列出目录:

dir /ad /b /s
  • 使用以下命令列出所有文件(不包括目录):

ls -p | grep -v /

dir /a-d /b /s

将输出重定向到文件:

dir /a-d /b /s > filename.txt

dir 命令参数解释(维基百科)


3
有没有可能列出文件大小而不按文件夹分组?我想导入Excel并生成一些报告。 - Nic Cottrell
2
如果您删除 /b,它将显示文件大小和时间戳。@Nic Cottrell - Brian
OP 要求的是 shell,不是 Windows。为什么会有这么多赞? - dtrunk

38

Bash/Linux Shell

目录:

find ./ -type d 

文件:

find ./ -type f 

如何将 Bash/Shell 输出写入文件

目录:

find ./ -type d  > somefile.txt

文件:

find ./ -type f  > somefile.txt

找到 ./ -type d,f - siddhusingh

30

在shell中:

find . -type d

显示当前工作目录下的目录,以及:

find . -type f

提供当前工作目录中的文件。

. 替换为您感兴趣的目录。


6
在Windows中,您可以像这样做作为最灵活的解决方案,它允许您额外处理目录名称。
使用FOR /R递归执行批处理命令。
查看此批处理文件。
@echo off
SETLOCAL EnableDelayedExpansion

SET N=0
for /R %%i in (.) do (
     SET DIR=%%i

     ::put anything here, for instance the following code add dir numbers.
     SET /A N=!N!+1
     echo !N! !DIR!
)

同样地,对于文件,您可以将模式作为一组而不是点添加,在您的情况下

 (*.*)

OP 要求的是 shell,而不是 Windows 批处理。 - dtrunk

4
在Linux中,一个简单的
find . -printf '%y %p\n'

该命令将列出所有包含的项目,包括目录和文件。您可以将此输出保存到临时文件中,然后提取所有以“d”开头的行;这些将是目录。以“f”开头的行是文件。


找到 ./ -type d,f - siddhusingh

3

虽然这是一个旧问题,但我还是想加点东西。

DIR命令无法正确遍历您想要的所有目录树,特别是C:盘上的目录树。它在某些地方只是因为不同的保护而放弃了。

ATTRIB命令效果更好,因为它可以找到更多内容。(为什么会有这种差异?微软为什么会让一个实用程序在这方面以一种方式工作,而另一个则以不同的方式工作?我也不知道。)根据我的经验,处理这个问题最有效的方法,虽然很拙劣,但是可以获取两个列表:

attrib /s /d C:\ >%TEMP%\C-with-directories.txt

attrib /s C:\ >%TEMP%\C-without-directories.txt

并获取它们之间的区别。该区别即为C:上的目录(除了那些被隐藏得太好的目录)。对于C:盘,我通常会使用管理员身份运行此命令。


2

In Windows :

dir /ad /b /s

dir /a-d /b /s


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