linux版本 - linux系統
遞歸計數Linux目錄中的文件 (13)
我如何遞歸計算Linux目錄中的文件?
我找到了這個:
find DIR_NAME -type f ¦ wc -l
但是當我運行它時,它會返回以下錯誤。
發現:路徑必須在表達式之前:|
find -type f | wc -l
OR(如果目錄是當前目錄)
找 。 -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
在我的電腦上, rsync
比find | 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.html : http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x700.html
這將工作得很好。 簡單的短。 如果要計算文件夾中存在的文件數量。
ls | wc -l
這裡有很多正確的答案。 這是另一個!
find . -type f | sort | uniq -w 10 -c
哪裡.
是要查看的文件夾, 10
是用於對目錄進行分組的字符數。