49

我想收到以下输出。

假设文件系统上的目录结构是这样的:

  -dir1
      -dir2
        -file1
        -文件2
             -dir3
                -file3
                -file4
            -dir4
                -file5
       -dir5
             -dir6
             -dir7

脚本的输出必须类似于:

目录:

/目录1
/目录1/目录2
/dir1/dir2/dir3
/dir1/dir2/dir4
/dir1/dir5
/dir1/dir5/dir6
/dir1/dir5/dir7

文件:

/目录1
/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另一个文件中吗?

4

7 回答 7

90

在 Windows 中,仅列出目录:

dir /ad /b /s

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

dir /a-d /b /s

将输出重定向到文件:

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

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

于 2009-04-14T13:16:16.330 回答
27

在外壳中:

find . -type d

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

find . -type f

给出当前工作目录中的文件。

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

于 2009-04-14T13:13:36.447 回答
26

Bash/Linux 外壳

目录:

find ./ -type d 

文件:

find ./ -type f 

Bash/Shell 进入文件

目录:

find ./ -type d  > somefile.txt

文件:

find ./ -type f  > somefile.txt
于 2009-04-14T13:13:27.477 回答
7

在 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!
)

对于文件的相似之处,您可以将模式添加为一组而不是点,在您的情况下

 (*.*)
于 2009-04-14T13:47:08.550 回答
4

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

DIR 无法正确遍历您想要的所有目录树,尤其是 C: 上的目录树。由于保护措施不同,它只是在某些地方放弃了。

ATTRIB 工作得更好,因为它发现更多。(为什么会有这种差异?为什么 MS 会让一个实用程序以一种方式工作,而另一个在这方面工作不同?如果我知道的话,该死的。)根据我的经验,处理这个问题的最有效方法,虽然它是一个 kludge,是获得两个列表:

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

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

并得到它们之间的区别。区别在于 C: 上的目录(除了那些隐藏得太好的目录)。对于 C:,我通常会以管理员身份运行。

于 2014-01-16T11:34:35.283 回答
3

在 Windows 中:

目录 /ad /b /s

目录 /ad /b /s

于 2009-04-14T13:16:11.713 回答
3

在 Linux 中,一个简单的

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

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

于 2009-04-14T13:18:40.723 回答