计算具有特定扩展名的特定目录中的文件总数

问题描述

我想计算以 “.mp4” 扩展名结尾的特定目录中的文件总数。

我收到以下命令:

ls -F |grep -v / | wc -l

它计算特定目录中的所有文件,但我想要以 .mp4 扩展名结尾的文件的数量。

是否有任何Ubuntu命令?

最佳方法

不幸的是,这个良性问题很难以支持所有文件名且可移植的方式解决。 This 是安全的(它处理隐藏文件、包含空格、破折号甚至换行符的路径)并且与 POSIX 兼容:

find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c

如果您不希望它是递归的,只需添加 -maxdepth 1

您不应该解析 ls 输出。

测试:

$ cd -- "$(mktemp -d)"
$ touch -- -foo.mp4 .bar.mp4 .bat.mp4 'baz.mp4
> ban.mp4'
$ find . -mindepth 1 -type f -name "*.mp4" -exec printf x \; | wc -c
4

与 the accepted answer 比较:

$ ls -lR ./*.mp4 | wc -l
3

或其他建议:

$ find . -name "*.mp4" | wc -l
5
$ ls -1 *.mp4 | wc -l
ls: invalid option -- '.'
Try 'ls --help' for more information.
0
$ find . -name "*.mp4" | wc -c # Answer fixed at a later time
51
$ find . -name "*.mp4" | wc -l
5
$ find . | grep -i ".mp4$" | wc -l
5
$ ls . | grep ".mp4$" | wc -l
3

次佳方法

在这里你可以这样做

ls -lR /path/to/dir/*.jpg | wc -l

这给你计数

第三种方法

这个按扩展名顺序查找、排序和列出所有文件:

find . -type f | sed 's/.*\.//' | sort | uniq -c

第四种方法

我认为以下命令非常简单。

$ find . -name "*.mp4" | wc -l
8

或者

$ find . | grep -i ".mp4$" | wc -l
8

我认为上面的命令计算文件和目录名称的计数 *.mp4

所以我建议你使用 -type f 选项作为 find 参数,如下所示。

$ find . -name "*.mp4" -type f | wc -l
8

另外,ls -lR 可以作为 find .

第五种方法

您可以使用 ls -1 *.mp4 | wc -l

这将列出所有以 .mp4 结尾的文件,在新行上打印每个文件( ls -1 *.mp4 ),将输出通过管道传输到 wc ,这将使用 -l 标志计算新行数。

参考资料

  • Count total number of files in particular directory with specific extension

计算具有特定扩展名的特定目录中的文件总数

扫一扫手机访问