當前位置: 首頁>>技術教程>>正文


計算具有特定擴展名的特定目錄中的文件總數

,

問題描述

我想計算以 “.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 標誌計算新行數。

參考資料

本文由Ubuntu問答整理, 博文地址: https://ubuntuqa.com/zh-tw/article/12770.html,未經允許,請勿轉載。