如何使用shell脚本计算文件和子目录的数量?

时间:2013-12-02 20:43:30

标签: file shell count

当前代码:

echo "What absolute directory do you want to count?"
read DIR
cd $DIR
files=`ls`
file=0;
dir=0;
for d in $files
do
    dir=`expr $dir + 1`
done
for f in $files
do
    file=`expr $file + 1`
done
echo "Files $file"
echo "Directories $dir"

正确的输出应该是(基于我测量的文件夹):

Files: 20
Directories: 1

但我得到了:

Files: 22
Directories: 22

所以它将计数文件和子目录放在一起,我希望它们是分开的。有任何想法吗?感谢。

4 个答案:

答案 0 :(得分:2)

如何使用find这样:

Files="$(find . -type f -maxdepth 1 -printf x | wc -c)"
Directories="$(find . -type d -maxdepth 1 -printf x | wc -c)"

Directories还将包含根目录(.)

答案 1 :(得分:1)

我建议两个更改:消除不必要的files变量,并使用glob而不是解析ls的输出。然后使用-d测试来查看每个目录条目是否是一个目录(如果不是,假设它是一个常规文件,除非你真的关心区分命名管道,字符设备,块设备等)并使用{算术的{1}}表达式。

$((...))

答案 2 :(得分:1)

这可以精确地在3行中完成:

read -p " Please enter the directory you want to count its files & subdirectories = " path

echo "Number of directories in $path =  "$(find $path/* -type d | wc -l)

echo "Number of Files in $path = "$(find $path/* -type f | wc -l)

答案 3 :(得分:0)

据我了解,OP要求对给定文件夹中的所有内容(文件和文件夹)进行计数。如果是正确的话,那么一个班轮就可以了:ls -l | wc -l