如何使用子目录的LS命令列出文件?

时间:2012-12-19 15:27:10

标签: shell

我有一个像这样的文件结构:

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

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

我需要计算级别2的文件,其中级别1是a,b目录,那么有没有办法做到这一点?获取特定级别的文件?

我是一个天真的shell程序员,到目前为止我用过的所有ls | wc-l,但在这种情况下它将返回2

4 个答案:

答案 0 :(得分:2)

又一种方式......

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

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

答案 1 :(得分:1)

有几种选择。

  1. 递归计算所有文件:

    find . -type f | wc -l
    
  2. 仅计算ab下的文件:

    find a b -type f | wc -l
    
  3. 计算深度为2的所有对象:

    find . -mindepth 2 -maxdepth 2 | wc -l
    find a b -mindepth 1 -maxdepth 1 | wc -l
    

答案 2 :(得分:1)

有些find(1)可执行文件支持mindepth和maxdepth选项(遗憾的是它们不是POSIX,但如果你使用像Linux或Cygwin那样的GNU工具):

find . -mindepth 2 -maxdepth 2

列出了所有子目录中的所有文件系统对象(。和..条目除外,这可能是你想要的)。

答案 3 :(得分:1)

假设使用bash或类似shell,请使用globbing和数组

$ 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