假設,我需要計算目錄中以 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 的檔案。
要克服這個問題,請設定nullglob
或failglob
shell 選項:
shopt -s nullglob
shopt -s failglob