如何使用Linux计算驱动器中的文件夹数量?


24

我需要组织一个外部硬盘,以使其上的文件夹不超过500个。Ubuntu的“属性”窗格仅显示文件计数,而不显示文件夹计数。

有没有简单的命令行可以告诉我子目录的数量?

我需要递归计数,并且驱动器是安装在的外部HDD /media/MUSIC/。它用于汽车立体声系统,其文档显示仅读取前500个文件夹。

Answers:


20

导航到驱动器并执行

ls -lR | grep ^d | wc -l

这似乎提供了比我三年前接受的答案更正确的数字。它计算了我所在的目录,但没有。
Dean Rather 2013年

我也看到了不同的数字,但差别不大。
SPRBRN

我个人比较喜欢grep -cwc -l。也许只是我。
Maxim_united 2016年

1
如果任何目录条目包含序列\nd(其中\nNL字符),则以上内容将计数过多。
Toby Speight

1
托比是正确的,ls不应将输出通过管道传输。此外,这将慢得多,因为它必须输出整个树,然后通过它运行grep
phuclv

37

总共查找所有文件夹,包括子目录吗?

find /mount/point -type d | wc -l

...或找到根目录中的所有文件夹(不包括子目录)?

find /mount/point -maxdepth 1 -type d | wc -l

那第一个正是我所追求的。谢谢!
Dean Rather 2010年

@Dean:是的,我以前也用它来计数音乐收藏中的目录。:)为获得吹牛的权利,请数一下您的MP3:查找/ mount / point -type f | grep -i mp3 | wc -l
quack quixote 2010年

1
@Dean:是的,我不知道查找语法,但是我通常会使用grep -vfind / mount / pt -type f | grep -vi mp3 | grep -vi wav | wc -l ...(并且<i> </ i>在注释中不起作用,用于*foo*斜体:foo
quack quixote 2010年

2
@Dean:我想您只是find /path -not -iname '*.mp3' | wc -l用来过滤MP3或同时使用MP3和WAVfind /path -not -iname '*.mp3' -not -iname '*.wav' | wc -l
嘎嘎堂吉x德2010年

1
需要添加-type f以使其也忽略文件夹,但是恭喜!我刚刚发现了一堆我不知道的m4a文件...谢谢!
院长拉瑟2010年

4

新行是目录名称中的有效字符。我建议让find每个找到的目录打印一个空行,然后wc对这些行进行计数。

find /mount/point -type d -printf '\n' | wc -l

3

尝试以下操作[参见下文]:

ls -1 -p | grep "/" | wc -l

这将打印当前目录的一列列表,并在子目录项的末尾加上斜杠,然后用斜杠计算行数。

编辑:您可能应该接受庸医吉基德的回答,因为它更为明确,但是我已经纠正了我的问题(在考虑了庸医的建议之后)。

ls -Rp | grep "/$" | wc -l

需要添加-R进行递归(对不起,对不起,对不起),并且需要指定ls的路径,但是可以,这可行:ls -1 -p -R / media / MUSIC / | grep“ /” | wc -l谢谢!
Dean Rather 2010年

在尝试了这和庸俗的吉x德的建议之后,我得到了两个不同的结果……我倾向于相信另一个。不管怎么说,还是要谢谢你!
Dean Rather 2010年

1
您不需要,-1因为ls会检测管道并且不会格式化列。也可以使用来获取递归列表-R,但是您可能希望grep "/$"只匹配尾部斜杠(否则计数将关闭)。最终版本:ls -Rp | grep "/$" | wc -l
quack quixote 2010年

1
我发布的查找版本将计入.(即/mount/point)计数,而我上面的评论中的ls版本将不计在内。这些计数相差1,因此您可以/mount/point/*find命令中使用它来更正(假设没有隐藏的点目录)。
quack quixote 2010年

我不确定为什么会得到两个不同的结果,但是@quack的方法将包括“隐藏”目录(即以“。”开头的目录)。
stuntmouse

1

我写了ffcnt来在特定情况下加快递归文件计数:支持范围映射的旋转磁盘和文件系统。

它可能比lsfind基于方法快一个数量级


1

当目录数量很多时,诸如之类的工具tree可能要花很长时间才能完成甚至挂起,因此您可能想使用更有效的工具。

我能想到的最有效的目录计数方法是以下方法,因为find它将只.为找到的每个文件夹打印一个文件夹,而不是完整的路径和文件名,并且wc只需要遍历字符数即可:

find /mount/point -type d -printf '.' |wc -c

要从/mount/point计算中排除自身,仅计算子目录:

find /mount/point -mindepth 1 -type d -printf '.' |wc -c

1

我发现它du --inodes有用,但是我不确定du它需要哪个版本。在Ubuntu 17.10上,以下工作正常:

du --inodes      # all files and subdirectories
du --inodes -s   # summary
du --inodes -d 2 # depth 2 at most

结合| sort -nr以按包含索引节点的数量降序排序。


0

我喜欢用树来拉目录

tree -d -R -fi --noreport | wc -l

或者,使用不当查找来显示大量文件夹所在的位置

find . -type d -printf "%h\n" | cut -d/ -f-2 | sort | uniq -c | sort -rn

或类似的东西:grep -e'^。* directories,'
mindcrime

-2

查找当前目录中的文件夹和目录数

在终端中输入以下命令

echo */ | wc
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.