回答
這簡單的一行應該在任何shell工作,不只是擊:
ls -1q log* | wc -l
LS -1q會給你每個文件一行,即使它們包含空格或特殊字符,例如換行符。
輸出被傳送到wc -l,它計算行數。
試試這個:
echo *.log | wc -w
或爲遞歸搜索:
find . -type f -name '*.log' | wc -l
wc -w
統計輸出中的字數(bash將*.log
作爲與該模式匹配的空格分隔的文件列表),而wc -l
將計算行數(find
每行打印一個結果)。
更新:對於非遞歸搜索,這樣做:
find . -maxdepth 1 -type f -name '*.log' | wc -l
這將規避lanzz提到的空間問題。
ls -1 log* | wc -l
這意味着每行列出一個文件,然後通過參數切換將其管道到字數統計命令,以便對行數進行計數。
管道ls輸出時不需要「-1」選項。但是如果沒有文件匹配模式,你可能想要隱藏ls錯誤信息。我建議「ls log * 2>/dev/null | wc -l」。 – JohnMudd
如果你有很多文件,並且你不想使用優雅的shopt -s nullglob
和bash數組解決方案,只要你不打印出文件名(可能包含新行)。
find -maxdepth 1 -name "log*" -not -name ".*" -printf '%i\n' | wc -l
這會發現,比賽日誌*和不帶.*
開始的所有文件 - 「沒有名字。*」是redunant,但要注意,對於「LS」的默認設置爲不很重要顯示點文件,但find的默認設置是包含它們。
這是一個正確的答案,並且可以處理任何類型的文件名,因爲文件名永遠不會在命令之間傳遞。
但是,shopt nullglob
答案是最好的答案!
這個問題的接受答案是錯誤的,但我有低代表所以不能添加評論。
正確回答這個問題是由墊給出:
shopt -s nullglob
logfiles=(*.log)
echo ${#logfiles[@]}
與接受答案的問題是,廁所-l計數的換行字符數,並計算他們,即使他們打印到終端作爲'?'在'ls -l'的輸出中。這意味着當文件名包含換行符時接受的答案失敗。我已經測試表明命令:
ls -l log* | wc -l
,它錯誤地報告爲2的值,即使只有1個符合他的名字恰好包含一個換行符的模式文件。例如:
touch log$'\n'def
ls log* -l | wc -l
這裏很多答案,但有些不考慮與空格,換行,或控制字符
- 文件名在其中,與連字號
- 文件名(想象一個名叫
-l
文件) - 空目錄(即結果爲0)
- 非常大的目錄(列出所有這些可能耗盡內存)
下面是處理所有這些解決方案:
ls 2>/dev/null -Ub1 -- log* | wc -l
說明:
-U
導致ls
的條目不排序,這意味着它不需要加載整個目錄在內存中列出-b
打印非圖形字符的C樣式轉義,致命地導致換行符被打印爲\n
。2>/dev/null
重定向stderr,以便如果有0個日誌文件,則忽略錯誤消息。 (請注意,shopt -s nullglob
將導致ls
列出整個工作目錄。)wc -l
消耗目錄列表,因爲它正在生成,所以ls
的輸出永遠不會在內存中的任何時間點。--
文件名使用--
以免被理解爲參數ls
命令分離(如果log*
被刪除)
外殼將擴大log*
到文件的完整列表,如果這是一個很大的文件,所以再通過grep的運行它這可能會耗盡內存會更好:的
ls -Ub1 | grep ^log | wc -l
這最後一個處理非常大的目錄文件沒有使用大量的內存(儘管它使用子shell)。
很好的答案,並且非常準確。 – raratiru
這是我的一個班輪。
file_count=$(shopt -s nullglob ; set -- $directory_to_search_inside/* ; echo $#)
- 1. 系統命令bash
- 2. bash命令文件
- 3. 有沒有一個bash命令來做到這一點?
- 4. 是否有bash命令來顯示可用的編輯器?
- 5. 通過BASH查找系統上是否有哪個命令可用
- 6. 做系統級命令來解壓縮一個'* .tgz'文件
- 7. 暫停在bash一個curl命令是下載文件
- 8. bash腳本:統計唯一行文件
- 9. sql是否有命令來檢查一行是否爲零?
- 10. 是否有一個兒童命令來補充父母的命令?
- 11. 是否有R命令來觸發從Rstudio Server下載文件?
- 12. 如何檢查一個文件是否是一個帶有PHP的bash文件?
- 13. Bash命令只移動一些文件?
- 14. 是否有bash命令顯示bash快捷鍵?
- 15. bash命令是否可以在前一個命令的結果之前繼續?
- 16. 是否有一個管道命令來創建標籤對象?
- 17. 是否有一個Resharper命令來查找變量的設置?
- 18. 是否有一個API來處理與Windows命令提示符?
- 19. 是否有一個JDBC命令來禁用表中的索引
- 20. bash nohup有兩個命令
- 21. 是否有一個dql命令來查找文檔庫所有者名稱?
- 22. 是否有unix命令來統計目錄中不同文件類型的數量?
- 23. 是否有一個終端命令列出我的系統知道一個文件的一切?
- 24. SQL命令來獲取性能統計
- 25. Bash命令查看文件的特定行是否爲空
- 26. 一個bash腳本來計算所有文件的數量
- 27. 是否有一個bash命令將整個目錄從HTML轉換爲HAML?
- 28. 是否有一個命令列出在bash上的所有系統調用名稱和數字?
- 29. Bash命令來比較兩個以上的文件
- 30. 是否有一個命令可用於命令行參數,如sort命令對文件的操作?
你只是*在另一面,但這工作thx很多 – hudi
謝謝,更正以符合你的問題。 :) – Daniel
我不會使用'-l',因爲每個文件上都需要'stat(2)'並且爲了計數而沒有添加任何內容。 – camh