没有子文件夹的文件夹数

时间:2013-11-01 16:47:47

标签: bash unix find

我不知道如何“简单地”获取没有子文件夹的文件夹数量。 我在-printf "%h\n"中找到find的内容,但我不确定这是为了什么。

1 个答案:

答案 0 :(得分: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,或者,更有趣,使用find内的find如下:

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

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


为了有一个(有点)全面的答案,我想添加以下精彩的方法。 Thor中的this comment of the OP指出了这一点,并引用Ben Jacksonanswer in another similar question,我将在下面引用(改编):

  

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

find . -type d -links 2
     

对目录进行其他硬链接是不合法的,所以不应该有误报。