Shell脚本统计指定目录下子目录中的文件个数

本文介绍了一个Bash脚本,用于统计指定源目录下每个子目录中的文件数量,并将结果输出到指定文件中。脚本通过命令行参数接收源目录路径及输出文件路径。
#!/bin/bash
function usage(){
    echo ""
    echo "introduction: count of files subdir of source dir to save file.txt with [[subdir] [number of files]"
    echo "subdir_files_count: usage: bash subdir_files_count -s [source dir] -o [output file ]"
    exit 1
}
while getopts "s:o:" arg #选项后面的冒号表示该选项需要参数
do
    case $arg in
         s)
            source="$OPTARG" #参数存在$OPTARG中
            ;;
         o)
            output="$OPTARG"
            ;;
         ?)  #当有不认识的选项的时候arg为?
            echo "unkonw argument"
            usage
            ;;
    esac
done
if [ -z $source ]
then
    usage
fi


if test ! -d $source
then
    echo "$source not exists!"
    exit 1
fi


dir_list=`ls $source | sort`
for sub_dir in $dir_list
do
if test -d "$source/$sub_dir"
then
fcout=`ls $source/$sub_dir | wc -l`
echo "$sub_dir $fcout" >> $output
fi
done
### 统计指定目录下的文件数量 在Shell脚本中,统计指定目录下的文件数量是一项常见的任务。可以通过多种方式实现,包括使用`ls`、`grep`和`wc`等命令组合,或者通过编写递归函数来处理更复杂的场景。 以下是一个简单的命令行示例,用于统计当前目录下的文件数量: ```bash ls -l | grep "^-" | wc -l ``` 这条命令会列出当前目录下所有的一般文件(不包括子目录中的文件)并进行计数[^2]。 如果需要统计包括子目录在内的所有文件数量,可以使用以下命令: ```bash ls -lR | grep "^-" | wc -l ``` 此命令通过递归地列出目录及其子目录下的所有内容,并仅保留一般文件的信息来进行计数。 对于更复杂的需求,例如同时统计文件目录的数量以及区分空文件与非空文件,可以采用一个完整的Shell脚本来完成任务。下面是一个这样的脚本示例: ```bash #!/bin/bash fun_directory(){ let "filenum=0" let "emptyfilenum=0" let "dirnum=0" let "emptydirnum=0" # 进入目标目录 cd $1 for i in $( ls ) do if [ -d $i ] # 判断是否为目录 then if [ "`ls -A $i`" = "" ] # 判断是否为空目录 then let emptydirnum+=1 else let dirnum+=1 fi else if [ -s $i ] # 判断文件是否不为空 then let filenum+=1 else let emptyfilenum+=1 fi fi done echo "[$1]目录中包含:" echo "$dirnum 个非空目录" echo "$emptydirnum 个空目录" echo "$filenum 个含数据的文件" echo "$emptyfilenum 个空文件" } fun_directory $1 ``` 这个脚本定义了一个名为`fun_directory`的函数,它接收一个目录作为参数,并进入该目录执行循环遍历其中的内容。对于每个项目,它会检查是文件还是目录,并进一步判断文件是否为空或目录是否为空,然后分别增加相应的计数器[^3]。 此外,如果希望以更加简洁的方式实现类似的功能,可以直接利用`find`命令的强大功能。例如,要查找特定类型的文件,可以使用如下命令: ```bash find /path/to/start -type f -name "*.txt" | wc -l ``` 这里`-type f`表示只查找文件,而`-name "*.txt"`则指定文件名模式匹配规则,最后通过管道将结果传递给`wc -l`来计算总共有多少个符合要求的文件[^2]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值