问题陈述:列出目录中的文件数。 注意:目录可以包含子目录或文件,但不能同时包含两个子目录。 需要明确列出目录文件数。 这是一段代码。
#!/usr/bin/sh
directory_navigate()
{
path=$1
cd $path
dir_count=`ls -l|grep '^d'|wc -l`
if [ $dir_count -gt 0 ]
then
for dir in `ls`
do
sub_path="$path/$dir"
directory_navigate $subpath
done
else
sub_path=`pwd`
file_count $sub_path
return
fi
}
file_count ()
{
path=$1
cd $path
count=`ls|wc -l`
echo "Count of files in $path is $count"
return
}
main()
{
filepath=/var/prod/data/extract/tbill
directory_navigate $filepath
return
}
main
这会引发以下错误:递归过深
答案 0 :(得分:2)
使用globstar
。在bash
做
shopt -s globstar
count=0
for name in /basefolder/**
do
[ -f "$name" ] && (( count++ ))
done
echo "Total files : $count"
评论中建议的更简单的方法是
find /basefolder/ -type f -printfc | wc -c
在这里,我们不必解析(并且不解析,我们只想计算)文件,如果我们需要解析文件以获得更复杂的要求,那么下面是一些原因不使用find。
-print0
)。while - read -r -d ' '
组合来解析每个文件。修改:如果您想要一个目录明确的文件计数列表,请执行以下操作
#!/bin/bash
shopt -s globstar
for name in ~/Documents/so/**
do
if [ -d "$name" ]
then
count="$(find "$name" -type f -printf c | wc -c)"
echo "Total files in $name : $count"
fi
done