当前代码:
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
所以它将计数文件和子目录放在一起,我希望它们是分开的。有任何想法吗?感谢。
答案 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