语法:
./count.sh <folder> <depth>
脚本将从 <folder>
开始(递归地)搜索最大深度为 <depth>
级别,并计算该文件夹中存在多少个常规文件和多少个目录。示例:如果 <folder>
是/
和 <depth>
为 2,程序将遍历文件夹/a/b/* 但不会解析 /a/b
的子文件夹(例如 /a/b/c/
将不会被解析)。
#!/bin/sh
a=`find "$1" -maxdepth $(($2+1)) -type f | wc -l`
b=`find "$1" -maxdepth $(($2+1)) -type d | wc -l`
b=$(($b-1))
echo files $a folders $b
这样可以吗?
最佳答案
您可能不需要脚本。
统计文件:
find <folder> -mindepth 1 -maxdepth <depth> -type f | wc -l
统计目录:
find <folder> -mindepth 1 -maxdepth <depth> -type d | wc -l
请注意这如何将您的问题分解为两个步骤:找到您感兴趣的所有文件/目录,并将结果通过管道传输到 wc -l
这只是计算行数。
请注意,此方法在大多数情况下都有效,但如果文件或目录的名称中包含换行符(这不是您经常看到的,但在技术上是可行的),则会产生错误的结果。如果这是一个问题,您可以使用类似的东西:
declare -i i=0
while IFS= read -d '' file
do
i+=1
done < <(find <folder> -mindepth 1 -maxdepth <depth> -type f -print0)
echo "$i"
这使用零字节作为分隔符(不能出现在文件名中)使用 -print0
选项,和 -d ''
read
的选项使用零字节作为记录分隔符。
关于linux - bash 脚本计算文件夹中有多少个常规文件和多少个目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42288474/