Answers:
在这里你可以这样
ls -lR /path/to/dir/*.jpg | wc -l
这给你数
-R
呢?stat
只需要文件名时为什么要进行完整备份?为什么不ls -1 *.jpg| wc -l
呢?(好的,如果您的文件名中包含换行符,则不起作用。在这种情况下,您应得到它;-) ...)
.jpg
*.jpg
被shell扩展,而不是被扩展ls
),并且文件名中以连字符开头,则失败。
不幸的是,这种良性问题很难以支持所有文件名并且可移植的方式解决。这是安全的(它处理隐藏文件,包含空格,破折号甚至换行符的路径)并且与POSIX兼容:
find /path/to/directory -mindepth 1 -type f -name "*.mp4" -printf x | wc -c
如果您不希望它是递归的,只需添加-maxdepth 1
。
测试:
$ 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
-printf
不支持POSIXfind
,这就是为什么我不使用它。
-mindepth
和-maxdepth
您使用的。
find
包含-mindepth
和-maxdepth
,但不包含-printf
,所以我很欣赏双方的包容性。
该文件按扩展名依次查找,排序和列出所有文件:
find . -type f | sed 's/.*\.//' | sort | uniq -c
| sort -rn
在末尾添加一个,-mindepth 1
如果只是当前目录,也可以添加一个。
head -n
获得前n个。
您可以使用ls -1 *.mp4 | wc -l
。
这将列出所有以结尾的.mp4
文件,将每个文件打印在新行(ls -1 *.mp4
)上,并将输出通过管道传输到wc
该行,该输出将使用该-l
标志计算新行数。
*.mp4
不是由Shell扩展ls
,因此如果.mp4
目录中的文件太多而无法将其列表ls
作为参数传递,则失败。
--.mp4
--
将解决第二种情况;前者会出现错误消息(您需要很多文件!),而这里还有另一个不错的问题。极端情况,但值得注意的是。
这应该给你带.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
wc -l
ls /directory/*.mp4
会导致Shell扩展glob并执行类似的操作,ls /directory/file1.mp4 /directory/file2.mp4 ...
如果该目录包含的mp4文件超出了作为参数传递给的mp4文件,则此操作将失败ls
。
在bash中,一种冷酷的手段是将数组与glob结合使用:
$ files=( *.mp4 )
$ echo ${#files[@]}
30
ls | grep --count \.csv$
替换(.csv为所需的扩展名)
说明:我认为一个简单的方案是获取文件列表,并使用grep计算扩展名。\.
匹配.
并$
匹配行尾的扩展名。之所以起作用,是因为通过管道输出ls的输出时,每行发送一个文件名,您可以通过运行以下命令进行验证:
ls | cat
grep --count
,您也可以使用代替grep -c
。
检查如何在Linux中按扩展名计数文件?,它给出了很好的答案和解释,您可以使用以下命令:
find . -type f | sed -n 's/..*\.//p' | sort | uniq -c
ls -1
在这种情况下,对换行符的处理使解析ls
输出变得明智。标记为-R的标志是错误的。