題 遞歸計算目錄中的所有文件[重複]


可能重複:
如何計算使用Linux的驅動器中的文件夾數量? 

我的Linux機器上有一個非常深的目錄樹。我想計算該路徑中的所有文件,包括所有子目錄。

例如,給定此目錄樹:

/home/blue
/home/red
/home/dir/green
/home/dir/yellow
/home/otherDir/

如果我傳入 /home,我想它返回四個文件。或者,如果它返回四個文件和兩個目錄,則獎勵積分。基本上,我希望相當於右鍵單擊Windows上的文件夾並選擇屬性並查看該文件夾中包含的文件/文件夾數量。

我怎樣才能最輕鬆地做到這一點?我有一個涉及我編寫的Python腳本的解決方案,但為什麼這不像運行那麼簡單 ls | wc 或者類似的?


170
2017-10-12 21:41


起源


不完全是你想要的,但要獲得一個非常快的總計, 如果 您的 locate 數據庫是最新的: locate /some/path | wc -l (或在我的Mac上: locate -c /some/path)。但是:這也將計算文件 /this/other/path/with/some/path,並將自己計算文件夾。 - Arjan
順便說一句,這是一個不同但密切相關的問題(計算驅動器上的所有目錄)和解決方案: superuser.com/questions/129088/... - Amanda


答案:


find . -type f | wc -l

說明:
find . -type f 找到所有文件( -type f )在這(  )目錄和所有子目錄中的文件名然後每行打印到標準輸出。

然後用管道輸送 | 成 wc (字數) -l 選項告訴wc只計算其輸入行。

他們一起計算所有文件。


293
2017-10-12 21:44





上面的答案已經回答了問題,但我要補充一點,如果你使用不帶參數的find(除了你想要搜索的文件夾),如:

find . | wc -l

搜索速度更快,幾乎是即時的,或者至少它對我來說。 這是因為type子句必須對每個名稱運行一個stat()系統調用來檢查它的類型 - 省略它可以避免這樣做。

這有區別在於返回文件數量加上文件夾而不僅僅是文件,但至少對我而言這已經足夠了,因為我主要使用它來查找哪些文件夾具有永久複製和壓縮它們的大量文件。計數文件夾仍然允許我找到大多數文件的文件夾,我需要更快的速度而不是精度。


45
2018-03-28 22:00





對於文件:

find -type f | wc -l

對於目錄:

find -mindepth 1 -type d | wc -l

它們都在當前的工作目錄中工作。


25
2017-10-12 21:56





使用bash 4+

shopt -s globstar
for file in **/*
do
  if [ -d "$file" ];then
    ((d++))
  elif [ -f "$file" ];then
     ((f++))
  fi
done
echo "number of files: $f"
echo "number of dirs: $d"

如果要搜索文件和目錄,則無需調用查找兩次


8
2017-10-13 01:58





如果你想要一個dirs等計數,輕微更新到接受的答案

find $DIR -exec stat -c '%F' {} \; | sort | uniq -c | sort -rn

7
2017-10-13 14:26



上 一台Mac / BSD: find $DIR -exec stat -f '%HT' {} \; | sort | uniq -c | sort -rn (這裡,輸入 %T 對於常規文件,可執行文件的星號或文件夾的斜杠,該項為空;於是 %HT 需要,或一些額外的文字,以避免空間不被計算,如 > %T。) - Arjan
給我“在我的10.13.6 mac上找到:非法選項 - e” - K.-Michael Aye