Linux
Linux 中的文件計數
我想計算一個目錄及其子目錄中的所有文件,但我不希望它計算 .zip 文件。所以我認為是這樣的:
find . -iname "*.zip" -type f 2> /dev/null | wc -l
除了向後 - 那隻會返回 .zip 文件,我只想計算其他文件。
LC_ALL=C find .//. ! -iname '*.zip' -type f 2> /dev/null | LC_ALL=C grep -c //
計算名稱不以
.zip
.幾點注意事項:
- 要否定
find
表達式中的測試,只需!
添加它。一些find
實現也支持-not
這一點,儘管這不是標準的也不是可移植的。- 您想禁用
find
(withLC_ALL=C
) 的本地化以查找以結尾的文件名,.zip
即使文件名不構成使用者區域設置中的有效文本。大寫字元也i
取決於語言環境(在某些情況下是I
,在其他情況下是İ
)。在 C 語言環境中,它是I
. 使用-name '*.[zZ][iI][pP]'
會使它變得標準且更具確定性。- 文件路徑可以由幾行組成,
wc -l
用於計算它們沒有意義。在這裡,我們使用find .//.
so//
在每個文件路徑中查找唯一的 ( ) ,我們用grep -c
. 使用 GNU 工具,find ... -print0 | sed -z '$='
如果找到 0 個文件,您也可以使用它不會給出任何輸出。find ... -print0 | tr -cd '\0' | wc -c
會更好(但可以在數字周圍有空格)。另請參閱find ... -print0 | gawk -v 'RS=\0' 'END{print NR}'
。或者使用 GNUfind
:find ... -printf . | wc -c
.