用于检查每个项目是否为路径中的文件或目录的程序

时间:2018-03-21 17:40:37

标签: linux shell

我有这个起始码,但我不知道从哪里开始。现在我使用路径〜/ Desktop,但它没有读取桌面目录。并且回显0表示目录和文件的数量。

#!/bin/sh

path="$1"
num_file=0
num_dir=0
for item in $path; do
if [ -d ]
then
     num_dir+=1
elif [ -f ]
then
     num_file+=1
fi
done
echo "The number of directories is $num_dir"
echo "The number of files is $num_file"

1 个答案:

答案 0 :(得分:1)

path="$1"

dirs=$(find "$path" -mindepth 1 -type d -printf "d"); 
fils=$(find "$path" -mindepth 1 -type f -printf "f"); 

echo "dirs: ${#dirs} files: ${#fils}"

打印变量的大小,仅收集字符“d”或“f”。

要避免访问子目录,请将-maxdepth 1添加到find命令。

在您的代码中,我看到了多个问题:

for item in $path; do
for item in "$path"/* ; do

您必须使用*来获取项目列表。

if [ -d ]
if [ -d "$item" ]

如果-d是什么?好吧,这个项目。

 num_dir+=1
 ((num_dir+=1))

双圆形做算术。在巴什 - 至少。也许你做过的一些关于'sh-Shell'的事情,但我对此表示怀疑。