用于查找目录中的文件、目录和临时文件数量的 Bash 脚本

用于查找目录中的文件、目录和临时文件数量的 Bash 脚本

我想编写一个 shell 脚本来统计目录中的文件、目录和临时文件的数量。下面的脚本会抛出错误。

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
 for f in *;
 do
    if [ -d "$d" ]; then
        dir=$((dir+1))
    elif [ -f "$f" ]; then
        file=$((file+1))
    else
        temp=$((temp+1))
    fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"

答案1

您有太多for语句:就目前情况而言,有一个循环变量 d 计数目录中的所有项目,第二个循环变量 f 对每个存在的文件再次执行此操作 - 因此,如果您有 4 个文件,那么您将获得 4*4=16 次迭代(或者如果 是done正确的话)。

您可以使用类似的语句ls -l | wc -l来快速检查大致数字是否正确。

我认为这更符合你的要求:

#!/bin/bash

cd '/home/Ubuntulover/Shell'

file=0
dir=0
temp=0
for d in *;
do
  if [ -d "$d" ]; then
    dir=$((dir+1))
  elif [ -f "$d" ]; then
    file=$((file+1))
  else
    temp=$((temp+1))
  fi
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"

答案2

您有语法错误,因为最上面的循环done中缺少关键字:for

 #!/bin/bash

cd '/home/479153/Temp' || exit

file=0
dir=0
temp=0
for d in *;
do
    for f in *; # this loop actually not needed
     do
        if [ -d "$d" ]; then
            dir=$((dir+1))
        elif [ -f "$f" ]; then # can be replace as $d
            file=$((file+1))
        else
            temp=$((temp+1))
        fi
    done
done
echo "Files $file"
echo "Directories $dir"
echo "Temporaryfiles $temp"

您可以随时使用http://www.shellcheck.net/网站来检查你的 bash 代码中的语法错误。

相关内容