Macos 计算目录中的子目录

Macos 计算目录中的子目录,macos,file,command-line,count,terminal,Macos,File,Command Line,Count,Terminal,使用Mac OS X 10.8.5。我认为在命令行上这样做是最有意义的,但也欢迎其他建议 我有一个各种备份的目录。这里大约有45个备份,每个备份都是定期运行的增量阶段。每个备份目录的目录结构相同,但每个备份目录的顶部/父目录具有不同的名称(时间戳)。例如: 2013_9_12_0500/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders 2013_9_12_0600/Files/MoreFiles/SomethingElse/Fo

使用Mac OS X 10.8.5。我认为在命令行上这样做是最有意义的,但也欢迎其他建议

我有一个各种备份的目录。这里大约有45个备份,每个备份都是定期运行的增量阶段。每个备份目录的目录结构相同,但每个备份目录的顶部/父目录具有不同的名称(时间戳)。例如:

2013_9_12_0500/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0600/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0700/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0800/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0900/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_13day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_14day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_10week/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0500/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  884 subdirs
2013_9_12_0600/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  1423 subdirs
2013_9_12_0700/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  540 subdirs
2013_9_12_0800/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  378 subdirs
等等

“subfolder”目录本身包含许多子目录。我想计算每个“子文件夹”目录中有多少子目录。例如:

2013_9_12_0500/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0600/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0700/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0800/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0900/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_13day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_14day/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_10week/Files/MoreFiles/SomethingElse/Folder/subfolder/morefolders
2013_9_12_0500/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  884 subdirs
2013_9_12_0600/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  1423 subdirs
2013_9_12_0700/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  540 subdirs
2013_9_12_0800/Files/MoreFiles/SomethingElse/Folder/subfolder/  =>  378 subdirs
等等

我在这个命令上有点运气:

 find ./*/*/*/*/*/subfolder -type d | wc -l
问题是,它只显示所有“子文件夹”的总数,而不显示每个子文件夹中的计数。例如,“13543”而不是上面列出的

是的,我可以一次一个手动完成,但是学习新东西的兴奋吗?:)

谢谢,
C

下面的许多诡计都是为了处理文件夹名称中的空格,但我认为这个函数将生成您的输出

用法:
countsubdirs PUT/PATH/HERE

countsubdirs(){
    ORIGIFS=$IFS
    IFS=$(echo -en "\n\b")
    DIRS=$(find "$1" -maxdepth 1 -mindepth 1 -type d )
    for D in $DIRS; do echo $D "=>" $(find $D -maxdepth 1 -mindepth 1 -type d | wc -l) subdirs; done
    IFS=$ORIGIFS
}
输出:

temp/hello =>        1 subdirs
temp/ntest 4 =>        0 subdirs
temp/temp =>        0 subdirs
temp/test =>        2 subdirs
temp/test 4 =>        0 subdirs
temp/test3 =>        1 subdirs
temp/tester =>        0 subdirs
temp/xl =>        1 subdirs
你为什么不这样做

for d in ./*/*/*/*/*/subfolder; do
    printf "%s\t" "$d"
    find "$d" -type d -printf "%i\n" | wc -l
done

如果目录名中有换行符或其他内容,则
-printf
命令的
-printf
选项是一种保护措施。

您基本上需要一个与sql的
group by
相当的命令行,在子文件夹所在的父文件夹上分组。使用裸的
find | wc
命令是不可能的。您需要一些额外的代码(sed/awk/perl/随便什么)来为您进行分组。这将涉及额外的步骤。我做了一点Sed/Awk,但那是很久以前的事了。:)假设这是一个shell脚本,我让它工作了!谢谢我做了一个小小的修改:我将您设置的'dirs'变量改为如下:“dirs=$(find.-name TOC)”。也许没有做Awk/Sed组合那么性感,但效果很好。:)只要有效,我完全赞成。是的,它是一个shell函数(类似于扩展别名)。我发现它比shell脚本更容易使用,因为如果将这些行添加到
.bash\u profile
中,那么该命令将在任何终端窗口中可用。很高兴您能够编辑它以适合您的特定应用程序。如果要使输出对齐,可以使用
printf
代替
echo
。。。最后,我不确定您是否只需要立即子目录或嵌套子目录,因此这显然只需要立即子目录。仅立即子目录是目的。@nyxee“不工作”如何?通配符肯定会在所有匹配的目录上循环,而
find | wc
肯定会对每个匹配中的目录进行计数。也许您需要一个不同的通配符?