计算树中每个目录的条目

Car*_*901 1 grep directory find shell-script

假设我有以下树:

root:
d foo 
d bar

/foo:
d A
- tmp.txt

/bar:
d B
- tmp2.txt

/foo/A:
- tmp3.txt

/bar/B:
Run Code Online (Sandbox Code Playgroud)

d = 目录和 - = 文件

我需要回答以下问题:哪个目录(不包括根目录)包含最少的条目?

我试过了

  find . | grep -oE '/([a-zA-Z]+/)+'
Run Code Online (Sandbox Code Playgroud)

获取每个目录的出现次数。问题是这个命令排除空目录,在这种情况下 /bar/B 被排除在外。

任何有关如何解决此问题的指导将不胜感激。

Sté*_*las 5

使用 GNU 工具:

find . -printf '%h\0' -type d ! -name . -print0 |
  sort -z |
  uniq -zc |
  sort -zn |
  sed -z q |
  tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)

如果可以保证文件名不包含换行符,则可以将其简化为:

find . -printf '%h\n' -type d ! -name . -print | sort | uniq -c | sort -n | head -n1
Run Code Online (Sandbox Code Playgroud)

(报告的数字是目录中的文件数减 1(.已计算,但未计算..))。

zsh

count() {
  set -- $REPLY/*(NDoN)
  REPLY=$#
}
print -r -- **/*(Do+count[1])
Run Code Online (Sandbox Code Playgroud)