2014-01-28 68 views
0

我想寫一個班輪找到每個主目錄中的文件數量。我試圖這樣做,因爲有一天我遇到了/ home的inode用完的情況。我花了很長時間才找到罪犯,我想縮短這個過程。這是我的,但它不工作。爲什麼我的一個班輪沒有被執行

for i in /home/*; do if [ -d "$i" ]; then cd $i find . -xdev -maxdepth 100 -type f |wc -l; fi done 

當我運行它時,它爲每個主目錄打印一個0,並且我保留在根目錄下。

然而,當我跑得這一部分:

for i in /home/*; do if [ -d "$i" ]; then cd $i; fi done 

我在最後一個主場目錄拉閘導致我相信我走過他們。

當我在每個用戶的主目錄中運行以下命令:

find . -xdev -maxdepth 100 -type f |wc -l 

我得到一個合法的答案。

+0

您是否缺少cd $ i後的&&?也看到其他問題,如http://stackoverflow.com/questions/9839055/searching-and-counting-files-in-directories-and-subdirectories-bash或http://stackoverflow.com/questions/15216370/如何計算每個目錄中的文件數 – x29a

+0

在'cd $ i'後缺少';''? –

+0

或者只是刪除'cd' altogeather(不是最好的做法是將其放在shell腳本中),然後將路徑放到您的find中。另外,你爲什麼把這個作爲一個「班輪」呢? – BroSlow

回答

0

您錯過了cd後的終止字符。但更重要的是,如果您不小心使用cd可能會導致不必要的錯誤,請嘗試下面的代碼(不需要cd)。

for i in /home/*; do [ -d "$i" ] && echo "$i" && find "$i" -xdev -maxdepth 100 -type f | wc -l; done 
0

由於find可以採取多條路徑,你不需要一個循環:

find /home/*/ -xdev -maxdepth 100 -type f | wc -l 

爲了避免與含換行符的文件名的任何問題(罕見,是),你可以採取額外的好處GNU擴展find(你使用-maxdepth,所以我想你可以使用-printf以及):

find /home/*/ -xdev -maxdepth 100 -type f -printf "." | wc -c 

既然你不交流使用文件的名稱進行計數,將其替換爲單字符字符串,然後計算結果字符串的長度。

+0

您的文件不會爲單個目錄提供文件數只有總文件 – menders65

相關問題