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

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

我得到以下命令:

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

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

是否有任何Ubuntu命令?

在这里你可以这样做

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

这让你算数

不幸的是,这种良性问题很难以支持所有文件名的方式解决并且是可移植的。 这是安全的(它处理隐藏文件,包含空格,破折号甚至换行符的路径) 和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 

与接受的答案相比 :

 $ 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 

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

 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 ls -1 *.mp4 | wc -l

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

这应该为您提供.mp4文件列表

 ls /path/to/directory | grep ".mp4$" 

当与wc -l结合使用时会给你数数

 ls /path/to/directory | grep ".mp4$" | wc -l 

如果要搜索包含子目录

 ls -lR /path/to/directory | grep ".mp4$" | wc -l 

ls | grep --count \.csv$

替换(.csv与您想要的扩展名)

说明:我认为一个简单的方案是获取文件列表,并使用grep计算扩展名。 \. 匹配.$匹配行尾的扩展名。 它的工作原理是,当输出ls的输出时,每行发送一个文件名,您可以通过运行来validation:

ls | cat

在bash中,一个冷酷的方法是使用带有glob的数组:

 $ files=( *.mp4 ) $ echo ${#files[@]} 30