計算目錄中的特定文件

計算目錄中的特定文件

假設,我需要計算目錄中以 o 結尾的每個檔案。 (例如 ab12.14o、70010340.09o)。我需要使用哪個命令?

我嘗試過ls *.o | wc,但沒有成功。

答案1

您可能只需要從 glob 表達式中刪除.- 這導致它只匹配以.o而不是結尾的文件o

然而,更好的方法是使用find

find . -maxdepth 1 -name '*o' -printf 'x' | wc -c

您可以新增-type f以將其限制為純檔案(不包括目錄),-maxdepth 1如果您想遞歸計數,則可以刪除 。

答案2

不要使用ls.

使用 shell 陣列來儲存以 結尾的檔案的名稱o

files=( *o )

現在做:

echo "${#files[@]}"

獲取文件數量。

@steeldriver 提出了一個公平的觀點,如果您沒有匹配的檔案名,那麼 glob 模式將按字面意思理解。因此,即使沒有符合的檔案名,您仍然會得到檔案計數為 1 的檔案。

要克服這個問題,請設定nullglobfailglobshell 選項:

shopt -s nullglob
shopt -s failglob

相關內容