Lo scenario è tra i più comuni nell’ambito dell’amministrazione di sistemi Linux based. Quando abbiamto bisogno di preparare uno script Bash che itera operazioni per ogni cartella presente in un dato percorso, possiamo seguire questa semplice guida.
Iterare operazioni per ogni cartella in Bash
Ipotiziamo di avere una serie di file e cartelle contenute nel percorso
/home/my-folder/
e di avere la necessita di ripetere una serie di istruzioni solo per tutte le cartelle (escludendo quindi i file) contenute nel percorso. Le porzioni di codice qui sotto vanno eseguite dal percorso /home/my-folder
.
Il nostro script Bash si presenterà così
for f in */ ; do
echo "$f"
done
La presenza dello slash dopo l’asterisco sta ad indicare che verranno tenute in considerazione solo le cartelle.
Inoltre, nel caso in cui si volessero escludere anche i link simbolici dal computo, possiamo aggiungere una condizione che nel caso in cui sia verificata salta all’iterazione successiva.
Lo script Bash si presenterà quindi così
for f in */ ; do
[ -L "${f%/}" ] && continue
echo "$f"
done
Un’altra valida alternativa è quella di testare se è effettivamente una cartella.
In questo caso lo script Bash sarà come il seguente
for f in *; do
if [ -d "$f" ]; then
echo "$f" #$f è una directory
fi
done