递归列出所有目录和文件

43 shell recursion directory-listing

我想收到以下输出.

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

  -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 d,并find . -type f到另一个文件?

小智 84

在Windows中,仅列出目录:

dir /ad /b /s
Run Code Online (Sandbox Code Playgroud)

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

dir /a-d /b /s
Run Code Online (Sandbox Code Playgroud)

将输出重定向到文件:

dir /a-d /b /s > filename.txt
Run Code Online (Sandbox Code Playgroud)

dir命令参数在维基百科上解释

  • 是否可以列出文件大小而无需按文件夹分组?我想导入Excel并做一些报告. (3认同)
  • @Nic科特雷尔如果您删除/ B,它会显示与文件大小和时间戳 (2认同)

mou*_*iel 22

在shell中:

find . -type d
Run Code Online (Sandbox Code Playgroud)

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

find . -type f
Run Code Online (Sandbox Code Playgroud)

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

替换.您感兴趣的目录.


Ken*_*ric 21

Bash/Linux Shell

目录:

find ./ -type d 
Run Code Online (Sandbox Code Playgroud)

文件:

find ./ -type f 
Run Code Online (Sandbox Code Playgroud)

Bash/Shell进入文件

目录:

find ./ -type d  > somefile.txt
Run Code Online (Sandbox Code Playgroud)

文件:

find ./ -type f  > somefile.txt
Run Code Online (Sandbox Code Playgroud)


maj*_*tor 7

在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!
)
Run Code Online (Sandbox Code Playgroud)

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

 (*.*)
Run Code Online (Sandbox Code Playgroud)