我有这样的文件结构:
a
----1
----2
----3
b
----1
----2
----3
我需要计算级别 2 的文件,级别 1 是 a,b 目录,那么有什么办法吗?获取特定级别的文件?
我是一个天真的 shell 程序员,到目前为止我用过的都是 ls | wc-l,但在这种情况下它会返回 2
我有这样的文件结构:
a
----1
----2
----3
b
----1
----2
----3
我需要计算级别 2 的文件,级别 1 是 a,b 目录,那么有什么办法吗?获取特定级别的文件?
我是一个天真的 shell 程序员,到目前为止我用过的都是 ls | wc-l,但在这种情况下它会返回 2
Yet another way...
L2FilesDirs=`ls -d */* | wc -l`
L2Dirs=`ls -d */*/ | wc -l`
L2OnlyFiles=$(( $L2FilesDirs - $L2Dirs ))
假设 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
有几个选项。
递归计算所有文件:
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
一些 find(1) 可执行文件支持 mindepth 和 maxdepth 选项(遗憾的是,它们不是 POSIX,但如果您使用 Linux 或 Cygwin 等 GNU 工具):
find . -mindepth 2 -maxdepth 2
它列出了所有子目录中的所有文件系统对象(除了 . 和 .. 条目,这可能是你想要的)。