Policz pliki i katalogi za pomocą skryptu powłoki
Uczę się skryptów bash i napisałem skrypt do zliczania plików i katalogów w katalogu, który jest dostarczany jako argument. Mam to działające w jedną stronę, co wydaje mi się dziwne i zastanawiam się, czy istnieje prostszy sposób na to.
Skomentowałem kod, który będzie działał, ale pozostawiłem go jako porównanie. Próbuję zdobyćfor
-loop działa, zamiast tego używaćif
instrukcje wewnątrz niego, aby wykryć, czy element w danej lokalizacji jest plikiem lub katalogiem.
Edytować: Właśnie dowiedziałem się, że skomentowany kod zlicza również wszystkie pliki i katalogi w podkatalogach danej lokalizacji! Czy jest jakiś sposób, aby temu zapobiec i po prostu policzyć pliki i katalogi danej lokalizacji?
#!/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
Z jakiegoś powodu wyjściefor
-loop, bez względu na to, gdzie wskazuję lokalizację, zawsze zwraca:
File count: 0 , Directory count: 1