我正在学习bash脚本并编写了一个脚本来计算作为参数提供的目录中的文件和目录。我的工作方式对我来说似乎很奇怪,我想知道是否有一种更简单的方法。使用shell脚本计算文件和目录
我已经注释掉了可以正常工作的代码,但是将其留作比较。我试图让for
环回工作,而不是使用if
语句来检测给定位置中的项目是文件还是目录。
编辑:我刚刚发现注释代码计算给定位置的子目录中的所有文件和目录!有没有什么办法来防止这种情况,只计算给定位置的文件和目录?
#!/bin/bash
LOCATION=$1
FILECOUNT=0
DIRCOUNT=0
if [ "$#" -lt "1" ]
then
echo "Usage: ./test2.sh <directory>"
exit 0
fi
#DIRS=$(find $LOCATION -type d)
#FILES=$(find $LOCATION -type f)
#for d in $DIRS
#do
# DIRCOUNT=$[$DIRCOUNT+1]
#done
#for f in $FILES
#do
# FILECOUNT=$[$FILECOUNT+1]
#done
for item in $LOCATION
do
if [ -f "$item" ]
then
FILECOUNT=$[$FILECOUNT+1]
elif [ -d "$item" ]
then
DIRCOUNT=$[$DIRCOUNT+1]
fi
done
echo "File count: " $FILECOUNT
echo "Directory count: " $DIRCOUNT
出于某种原因,for
-loop的输出,无论在哪里我点位置,总是返回:
File count: 0 , Directory count: 1
如果文件名中出现空格,则整个脚本都会中断。正如你在学习,我的第一个建议是:使用更多的行情! –
另一评论:我可以告诉你,学习bash的来源已经过时,并没有显示良好的做法。 –
在文件名扩展考虑阅读:http://bash.cyberciti.biz/bash-reference-manual/Filename-Expansion.html – hovanessyan