linux - bash 脚本计算文件夹中有多少个常规文件和多少个目录

标签 linux bash

语法:

./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/

相关文章:

node.js - 如何在 Bluemix 中部署的 Node 应用程序中执行 Linux 进程?

linux - 确定 linux 系统 IP 接口(interface)上的平均传输速率

bash - 如何在 shell 脚本中使用 ssh?

bash - 将目录的快捷方式(软链接(soft link))添加到全局 PATH 以便可以从任何地方访问它

linux - 改变鞭尾鱼的颜色

linux - 在 C 编程中如何获取传递给程序的命令行参数

linux - 如何更改UTF文件的大小写

linux - 如何将文件复制到时间戳自动生成的文件夹?

bash - 我想查找 Jenkins 工作的进程 ID

bash - 剪切命令的问题