递归列出所有目录和文件

发布于 2024-07-16 17:44:07 字数 654 浏览 6 评论 0原文

我想收到以下输出。

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

  -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 。 -在另一个文件中输入 f

I would like to receive the following output.

Suppose the directory structure on the file system is like this:

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

The output from the script must be like:

Directories:

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

Files:

/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

Could you tell me how to keep the output of find . -type d and find . -type f into another file?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

萌吟 2024-07-23 17:44:07

在 Windows 中,仅列出目录:

dir /ad /b /s

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

dir /a-d /b /s

将输出重定向到文件:

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

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

In windows, to list only directories:

dir /ad /b /s

to list all files (and no directories):

dir /a-d /b /s

redirect the output to a file:

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

dir command parameters explained on wikipedia

风尘浪孓 2024-07-23 17:44:07

Bash/Linux Shell

目录:

find ./ -type d 

文件:

find ./ -type f 

Bash/Shell 进入文件

目录:

find ./ -type d  > somefile.txt

文件:

find ./ -type f  > somefile.txt

Bash/Linux Shell

Directories:

find ./ -type d 

Files:

find ./ -type f 

Bash/Shell Into a file

Directories:

find ./ -type d  > somefile.txt

Files:

find ./ -type f  > somefile.txt
王权女流氓 2024-07-23 17:44:07

在 shell 中:

find . -type d

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

find . -type f

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

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

in shell:

find . -type d

gives directories from current working directory, and:

find . -type f

gives files from current working directory.

Replace . by your directory of interest.

眼前雾蒙蒙 2024-07-23 17:44:07

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

与文件类似,您可以根据您的情况添加模式作为一组而不是点

 (*.*)

On Windows, you can do it like this as most flexibile solution that allows you to additionally process dir names.

You use FOR /R to recursively execute batch commands.

Check out this batch file.

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

Similary for files you can add pattern as a set instead of dot, in your case

 (*.*)
小红帽 2024-07-23 17:44:07

在 Linux 中,一个简单的命令

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

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

In Linux, a simple

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

will give you a list of all the contained items, with directories and files mixed. You can save this output to a temporary file, then extract all lines that start with 'd'; those will be the directories. Lines that start with an 'f' are files.

任谁 2024-07-23 17:44:07

这是一个老问题,但我想我还是要补充一些东西。

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

ATTRIB 的效果要好得多,因为它可以找到更多内容。 (为什么会出现这种差异?为什么微软会让一个实用程序以一种方式工作,而另一个实用程序在这方面以不同的方式工作?如果我知道的话就该死。)根据我的经验,处理这个问题的最有效方法是获得两个列表,尽管这是一个拼凑:

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

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

并获取它们之间的差异。 这个区别在于 C: 上的目录(除了那些隐藏得太好的目录)。 对于 C:,我通常会以管理员身份运行来执行此操作。

This is an old question, but I thought I'd add something anyhow.

DIR doesn't traverse correctly all the directory trees you want, in particular not the ones on C:. It simply gives up in places because of different protections.

ATTRIB works much better, because it finds more. (Why this difference? Why would MS make one utility work one way and another work different in this respect? Damned if I know.) In my experience the most effective way to handle this, although it's a kludge, is to get two listings:

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

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

and get the difference between them. That difference is the directories on C: (except the ones that are too well hidden). For C:, I'd usually do this running as administrator.

谁许谁一生繁华 2024-07-23 17:44:07

在 Windows 中:

dir /ad /b /s

dir /ad /b /s

In Windows :

dir /ad /b /s

dir /a-d /b /s

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文