Linux

Linux 中的文件計數

  • September 9, 2021

我想計算一個目錄及其子目錄中的所有文件,但我不希望它計算 .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(with LC_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}'。或者使用 GNU find: find ... -printf . | wc -c.

引用自:https://unix.stackexchange.com/questions/668267