我有一个像这样的文件结构:
a
----1
----2
----3
b
----1
----2
----3
我需要计算级别2的文件,其中级别1是a,b目录,那么有没有办法做到这一点?获取特定级别的文件?
我是一个天真的shell程序员,到目前为止我用过的所有ls | wc-l,但在这种情况下它将返回2
答案 0 :(得分:2)
又一种方式......
L2FilesDirs=`ls -d */* | wc -l`
L2Dirs=`ls -d */*/ | wc -l`
L2OnlyFiles=$(( $L2FilesDirs - $L2Dirs ))
答案 1 :(得分:1)
有几种选择。
递归计算所有文件:
find . -type f | wc -l
仅计算a
和b
下的文件:
find a b -type f | wc -l
计算深度为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