Sto imparando lo script di bash e ho scritto uno script per contare i file e le directory nella directory fornita come argomento. Lo faccio funzionare in un modo che mi sembra strano e mi chiedo se esiste un modo più semplice per farlo.Conteggiare file e directory utilizzando lo script di shell
Ho commentato il codice che funzionerà, ma l'ho lasciato come confronto. Sto cercando di ottenere il funzionamento di for
, utilizzando invece le istruzioni if
al suo interno per rilevare se un elemento nel percorso specificato è un file o una directory.
Modifica: Ho appena scoperto che il codice commentato conta tutti i file e le directory nelle sottodirectory della posizione specificata! C'è un modo per prevenire questo e basta contare i file e le directory della posizione data?
#!/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
Per qualche motivo l'uscita del for
-loop, non importa dove io punto la posizione, torna sempre:
File count: 0 , Directory count: 1
L'intero script è rotto se ci sono spazi nei nomi dei file. Mentre stai ascoltando, il mio primo consiglio è: Usa più citazioni! –
Un altro commento: posso dire che le tue fonti per l'apprendimento di bash sono obsolete e non mostrano buone pratiche. –
L'estensione del nome del file considera la lettura: http://bash.cyberciti.biz/bash-reference-manual/Filename-Expansion.html – hovanessyan