2

我不知道如何“简单地”获取没有子文件夹的文件夹数量。我发现了一些东西,-printf "%h\n"但是find我不确定这是为了什么。

4

1 回答 1

2
  • 要确定当前目录中不包含子文件夹的文件夹(不考虑隐藏文件夹):

      find . -maxdepth 1 -type d -execdir bash -c 'shopt -s nullglob; a=( "$1"/*/ ); ((${#a[@]}==0)); exit $?' _ {} \; -print
    
  • 考虑到隐藏的(但当然不是...

      find . -maxdepth 1 -type d -execdir bash -c 'shopt -s nullglob dotglob; a=( "$1"/*/ ); ((${#a[@]}==0)); exit $?' _ {} \; -print
    

如果您想递归到文件夹(即,也确定具有此属性的子文件夹),只需删除-maxdepth 1该命令的一部分。

当然还有其他方法:100% 纯 bash,或者更有趣的是,使用findinsidefind如下:

find . -maxdepth 1 -type d \! -execdir sh -c 'find "$1" -mindepth 1 -type d -print -quit | read a' _ {} \; -print

请注意,对于包含有趣符号(空格、换行符、前导/尾随空格和换行符等)的文件名,这些方法是 100% 的。


为了得到一个(某种)全面的答案,我想添加以下精彩的方法。ThorOP 的此评论中指出了这一点,并在另一个类似的问题中引用了Ben Jackson回答,我将在下面引用(带有改编):

..[如果您的文件系统支持硬链接] 有一个更简单的解决方案,它利用来自每个子目录的父目录链接将目录的链接计数增加 1的事实。没有子目录的目录的链接计数为 2 (.以及来自其父级的链接(按其名称)。因此,没有子目录的目录的链接计数为 2,可以使用以下命令找到:

find . -type d -links 2

对目录进行其他硬链接是不合法的,因此不应出现误报。

于 2013-11-01T17:27:38.000 回答