我想收到以下输出。
假设文件系统上的目录结构如下:
-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
的输出保存到另一个文件中?
答案 0 :(得分:82)
在Windows中,仅列出目录:
dir /ad /b /s
列出所有文件(没有目录):
dir /a-d /b /s
将输出重定向到文件:
dir /a-d /b /s > filename.txt
答案 1 :(得分:22)
:
find . -type d
从当前工作目录中提供目录,并且:
find . -type f
从当前工作目录中提供文件。
将.
替换为您感兴趣的目录。
答案 2 :(得分:21)
目录:
find ./ -type d
文件:
find ./ -type f
目录:
find ./ -type d > somefile.txt
文件:
find ./ -type f > somefile.txt
答案 3 :(得分: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!
)
类似于文件,你可以添加模式作为集合而不是点,在你的情况下
(*.*)
答案 4 :(得分:3)
在Windows中:
dir / ad / b / s
dir / a-d / b / s
答案 5 :(得分:3)
在Linux中,一个简单的
find . -printf '%y %p\n'
将为您提供所有包含项目的列表,其中包含目录和文件。您可以将此输出保存到临时文件,然后提取以'd'开头的所有行;那些将是目录。以'f'开头的行是文件。
答案 6 :(得分: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:,我通常以管理员身份运行。