我不知道如何“简单地”获取没有子文件夹的文件夹数量。我发现了一些东西,-printf "%h\n"
但是find
我不确定这是为了什么。
问问题
79 次
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,或者更有趣的是,使用find
insidefind
如下:
find . -maxdepth 1 -type d \! -execdir sh -c 'find "$1" -mindepth 1 -type d -print -quit | read a' _ {} \; -print
请注意,对于包含有趣符号(空格、换行符、前导/尾随空格和换行符等)的文件名,这些方法是 100% 的。
为了得到一个(某种)全面的答案,我想添加以下精彩的方法。Thor在OP 的此评论中指出了这一点,并在另一个类似的问题中引用了Ben Jackson的回答,我将在下面引用(带有改编):
..
[如果您的文件系统支持硬链接] 有一个更简单的解决方案,它利用来自每个子目录的父目录链接将目录的链接计数增加 1的事实。没有子目录的目录的链接计数为 2 (.
以及来自其父级的链接(按其名称)。因此,没有子目录的目录的链接计数为 2,可以使用以下命令找到:find . -type d -links 2
对目录进行其他硬链接是不合法的,因此不应出现误报。
于 2013-11-01T17:27:38.000 回答