2012-03-23 129 views
0

我有一個關於在目錄和子目錄中搜索和計數文件的問題。我試圖做這樣的事情在目錄和子目錄中搜索和計數文件[BASH]

for i in $(find $TEST_DIR -type d | wc -l); do 
     for j in $(find $i -type f | wc -l); do 
      FILES=$[FILES+j] 
     done  
     DIRS=$[DIRS+i] 
    done 

但它不起作用。我只是要算在每個目錄和子目錄中的文件後,我要比較的文件和目錄(子目錄) 感謝您的幫助:)

+0

但我需要遞歸發現它因爲如果在每個目錄中我一定要找到如果只有目錄或沒有(如果沒有,我必須寫一條警告消息) – nikigx2 2012-03-23 12:28:07

回答

3

find命令會發現所有的文件/顯示目錄遞歸的數量,所以for...loop不需要:

FILES=$(find $TEST_DIR -type f | wc -l) 
DIRS=$(find $TEST_DIR -type d | wc -l) 

如果你的文件名可能包含newline,試試這個:

FILES=$(find $TEST_DIR -type f -printf x | wc -c) 
+0

這不是100%正確的(但顯然大部分時間都是這樣):如果文件名包含換行符(UNIX允許) ,它會失敗。那個用GNU find會更好用:'find「$ TEST_DIR」-type f -printf「1 \ n」| wc -l' – 2012-03-23 12:29:35

+0

作爲換行符的替代方法:'find「$ TEST_DIR」-type f -print0 | xargs -0 wc -l' – 2012-03-23 13:08:28

相關問題