【发布时间】:2012-12-05 15:49:09
【问题描述】:
我正在学习 bash 脚本,并编写了一个脚本来计算作为参数提供的目录中的文件和目录。我让它以一种对我来说很奇怪的方式工作,我想知道是否有更简单的方法。
我已经注释掉了可以工作的代码,但将其保留为比较。我试图让for-loop 工作,而不是在其中使用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 的资源已经过时,没有显示出良好的做法。
-
关于文件名扩展考虑阅读:bash.cyberciti.biz/bash-reference-manual/…
-
你好,我不明白,文件名中的空格在哪里?
-
文件名中可以有空格。试试这个:
touch "hello Kitty",你会得到一个文件名中带有空格的文件。更糟糕的是,试试touch $'hello\nKitty',你会得到一个文件名,使用涉及find的方法将不容易处理。
标签: linux bash shell unix scripting