2012-12-19 85 views
0

我有一個文件strucuture這樣的:如何使用子目錄的LS命令列出文件?

a 
----1 
----2 
----3 

b 
----1 
----2 
----3 

我需要用1級爲A,B目錄計數2級的文件,那麼有沒有這樣做的方法嗎?獲取特定級別的文件?

我是一個天真的shell程序員,所有我迄今爲止使用ls | wc-l,但在這種情況下它將返回2

回答

1

有幾個選項。

  1. 計數遞歸的所有文件:在深度2

    find a b -type f | wc -l 
    
  2. 計數的所有對象:

    find . -mindepth 2 -maxdepth 2 | wc -l 
    find a b -mindepth 1 -maxdepth 1 | wc -l 
    
  3. find . -type f | wc -l 
    
  4. a下計數文件,並只b

1

有些人覺得(1)可執行文件支持mindepth和MAXDEPTH選項(他們是可悲的不是POSIX,但如果你使用像Linux或Cygwin的GNU工具):

find . -mindepth 2 -maxdepth 2 

其中列出了所有的文件系統對象所有子目錄(除外。和..條目,這可能是你想要的東西)。

2

又一種方式...

L2FilesDirs=`ls -d */* | wc -l` 
L2Dirs=`ls -d */*/ | wc -l` 

L2OnlyFiles=$(($L2FilesDirs - $L2Dirs)) 
1

假設bash或類似外殼,使用通配符和陣列

$ ls -R 
.: 
a b 

./a: 
1 2 3 

./b: 
4 5 6 
$ level2=(*/*) 
$ echo "num files at level 2: ${#level2[@]}" 
num files at level 2: 6 
相關問題