linux版本 - linux系統




遞歸計數Linux目錄中的文件 (13)

find -type f | wc -l

OR(如果目錄是當前目錄)

找 。 -type f | wc -l

我如何遞歸計算Linux目錄中的文件?

我找到了這個:

find DIR_NAME -type f ¦ wc -l

但是當我運行它時,它會返回以下錯誤。

發現:路徑必須在表達式之前:|


ls -l | grep -e -x -e -dr | wc -l

1.長列表2.篩選文件和目錄3.計算已過濾的行號


你可以嘗試:

find `pwd` -type f -exec ls -l {} ; | wc -l

在我的電腦上, rsyncfind | wc -l更快一點 find | wc -l在接受的答案中。 例如,你可以像這樣計算/Users/joe/的文件:

[joe:~] $ rsync --stats --dry-run -ax /Users/joe/ /xxx

Number of files: 173076
Number of files transferred: 150481
Total file size: 8414946241 bytes
Total transferred file size: 8414932602 bytes

第二行有上面例子中的150,481個文件。 作為獎勵,你也可以獲得總大小(以字節為單位)。

備註:

  • 第一行是文件,目錄,符號鏈接等的總數,這就是為什麼它大於第二行。
  • --dry-run (或簡稱為-n )選項對於不實際傳輸文件非常重要!
  • /xxx參數可以是任何空的或不存在的文件夾。 不要在這裡使用。
  • 我使用了-x選項來“不跨越文件系統邊界”,這意味著如果您為/執行它並且連接了外部硬盤,則它只會計算根分區上的文件。

如果您想知道當前工作目錄中有多少個文件和子目錄,您可以使用這一行

find . -maxdepth 1 -type d -print0 | xargs -0 -I {} sh -c 'echo -e $(find {} | wc -l) {}' | sort -n

這將在GNU風格中起作用,並且只需從BSD linux的echo命令(例如OSX)中省略-e即可。


如果您想要了解當前目錄下每個目錄中有多少個文件,請執行以下操作:

for i in $(find . -maxdepth 1 -type d) ; do 
    echo -n $i": " ; 
    (find $i -type f | wc -l) ; 
done

當然,這可以全部在一條線上。 圓括號闡明了誰的輸出wc -l應該在看(在這種情況下find $i -type f )。


對於當前目錄:

find . -type f | wc -l

您可以使用

$ tree

安裝樹形包後用

$ sudo apt-get install tree

(在Debian / Mint / Ubuntu Linux機器上)。

該命令不僅顯示文件的數量,還顯示目錄的數量。 選項-L可用於指定最大顯示級別(默認情況下,該級別是目錄樹的最大深度)。

通過提供-a選項,也可以包含隱藏的文件。


用bash:

使用()創建一個條目數組,並使用#獲得計數。

FILES=(./*); echo ${#FILES[@]}

好吧,不遞歸計數文件,但我想先顯示簡單的選項。 常見用例可能是創建文件的翻轉備份。 這將創建logfile.1,logfile.2,logfile.3等

CNT=(./logfile*); mv logfile logfile.${#CNT[@]}

為了遞歸地獲得文件的數量,我們仍然可以以相同的方式使用find。

FILES=(`find . -type f`); echo ${#FILES[@]}

由於UNIX中的文件名可能包含換行符(yes,newlines),因此wc -l可能會計算太多文件。 我會為每個文件打印一個點,然後計算點數:

find DIR_NAME -type f -printf "." | wc -c

要確定當前目錄中有多少個文件,請輸入ls -1 | wc -l ls -1 | wc -l 。 這使用wc來計算ls -1輸出中的行數(-l) 。 它不計算點文件。 請注意,在本HOWTO以前版本中使用的ls -l (這是“L”而不是前面例子中的“1”)實際上會給你一個比實際計數大1的文件數。 感謝Kam Nejad的這一點。

如果你只想計算文件而不包括符號鏈接(只是你可以做什麼的一個例子),你可以使用ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l ls -l | grep -v ^l | wc -l (這次是“L”不是“1”,這裡我們需要一個“長”列表)。 grep檢查任何以“l”開頭的行(指示鏈接),並丟棄該行(-v)。

相對速度:“ls -1 / usr / bin / | wc -l”在卸載486SX25(本機上的/ usr / bin /有355個文件)上大約需要1.03秒。 “ ls -l /usr/bin/ | grep -v ^l | wc -l ”大約需要1.19秒。

資料來源: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.htmlhttp://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html


這將工作得很好。 簡單的短。 如果要計算文件夾中存在的文件數量。

ls | wc -l

這裡有很多正確的答案。 這是另一個!

find . -type f | sort | uniq -w 10 -c

哪裡. 是要查看的文件夾, 10是用於對目錄進行分組的字符數。





linux