首页 文章

递归列出所有目录和文件

提问于
浏览
42

我想收到以下输出 .

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

-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 的输出保存到另一个文件中吗?

7 回答

  • 82

    在Windows中,仅列出目录:

    dir /ad /b /s
    

    列出所有文件(没有目录):

    dir /a-d /b /s
    

    将输出重定向到文件:

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

    dir command parameters explained on wikipedia

  • 21

    在shell中:

    find . -type d
    

    给出当前工作目录中的目录,并且:

    find . -type f
    

    从当前工作目录中提供文件 .

    用您感兴趣的目录替换 . .

  • 3

    Bash / Linux Shell

    目录:

    find ./ -type d
    

    文件:

    find ./ -type f
    

    Bash / Shell进入文件

    目录:

    find ./ -type d  > somefile.txt
    

    文件:

    find ./ -type f  > somefile.txt
    
  • 3

    在Windows上,你可以这样做,因为大多数flexibile解决方案允许你额外处理目录名称 .

    您使用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!
    )
    

    在您的情况下,类似于文件,您可以将模式添加为集合而不是点

    (*.*)
    
  • 22

    In Windows :

    dir / ad / b / s

    dir / a-d / b / s

  • 7

    在Linux中,一个简单的

    find . -printf '%y %p\n'
    

    将为您提供所有包含项目的列表,其中包含目录和文件 . 您可以将此输出保存到临时文件,然后提取以'd'开头的所有行;那些将是目录 . 以'f'开头的行是文件 .

  • 3

    这是一个老问题,但我想我无论如何都会添加一些东西 .

    DIR没有正确遍历您想要的所有目录树,特别是C:上的目录树 . 它因为不同的保护而放弃了 .

    ATTRIB工作得更好,因为它发现了更多 . (为什么会出现这种差异?为什么MS会让一个实用工具在这方面工作,另一个工作在这方面有所不同?如果我知道的话会诅咒 . )根据我的经验,处理这个问题最有效的方法,虽然它是一个kludge,但是要获得两个清单:

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

    并获得它们之间的差异 . 这个区别是C:上的目录(除了那些隐藏得太好的目录) . 对于C:,我通常以管理员身份运行 .

相关问题