我试图编写一个 bash 脚本来计算本地目录的文件数和目录数。这是我的第一次尝试:
#!/bin/bash
files=0
dir=0
for file in `ls`
do
if [ -d $file ]
then
dir=$(($dir+1))
else
files=$(($files+1))
fi
done
echo "files=$files, direcotries=$dir"
但是,那for
命令没有像我预期的那样迭代文件和目录的名称。如果文件或目录的名称有空格,则效果不佳。当名称中存在空格时,变量“file”采用文件(或目录)名称中每个单词的值。
有什么办法可以做到这一点吗?
使用通配符:for file in *; do …; done
。这样可以保持名称中的空格正确。考虑shopt -s nullglob也。您的代码和我的建议都没有列出以点开头的名称.
.
另外,使用if [ -d "$file" ]
用双引号将变量值引起来避免空格问题。
Hence:
#!/bin/bash
shopt -s nullglob
files=0
dir=0
for file in *
do
if [ -d "$file" ]
then
dir=$(($dir+1))
else
files=$(($files+1))
fi
done
echo "files=$files, directories=$dir"
在 Bash 中,还有其他编写算术的方法,例如((files++))
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)