0

我有这样的文件结构:

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

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

我需要计算级别 2 的文件,级别 1 是 a,b 目录,那么有什么办法吗?获取特定级别的文件?

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

4

4 回答 4

2

Yet another way...

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

L2OnlyFiles=$(( $L2FilesDirs - $L2Dirs ))
于 2012-12-19T15:58:41.983 回答
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
于 2012-12-19T19:36:09.467 回答
1

有几个选项。

  1. 递归计算所有文件:

    find . -type f | wc -l
    
  2. a仅计算以下文件b

    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
    
于 2012-12-19T15:29:54.337 回答
1

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

find . -mindepth 2 -maxdepth 2

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

于 2012-12-19T15:30:20.323 回答