Я изучаю скрипты bash и написал script для подсчета файлов и каталогов в каталоге, который поставляется в качестве аргумента. Я работаю так, что мне кажется странным, и мне интересно, есть ли более простой способ сделать это.
Я прокомментировал код, который будет работать, но оставил его в качестве сравнения. Я пытаюсь заставить 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