Verificare l'esistenza di un file in Bash
Immaginiamo di avere un file di nome requirements.txt
in una cartella e di voler scrivere uno script per capire se esista o meno.
Snippet§
Semplicissimo, bastano queste tre righe.
if [ -e "path/to/requirements.txt" ]; then
echo "Il file `requirements.txt` esiste.";
fi
Attenzione!: ricorda di lasciare uno spazio dopo la parentesi quadra in apertura ed uno prima della parentesi quadra in chiusura, quando costruisci delle condizioni in bash. L'assenza di uno spazio è sufficiente a sollevare un errore.
Cosa abbiamo fatto?§
Osserviamo quelle tre righe passo dopo passo. L'operatore chiave per verificare l'esistenza di un file è -e
che è stato ideato appositamente per questo scopo. È possibile anche utilizzare -a
, ma adesso se ne scoraggia l'uso, poiché ha lo stesso identico effetto.
Altri operatori§
Altri operatori sono:
-f
, necessario a verificare che il file sia un file regolare e non una cartella o un device file-s
, necessario a verificare il file non abbia dimensioni nulle-d
, se al contrario vogliamo verificare che sia una cartella (directory)-b
, se vogliamo verificare che sia un block device
device0="/dev/sda2" # / (root directory)
if [ -b "$device0" ]
then
echo "$device0 is a block device."
fi
# /dev/sda2 is a block device.
-c
, se vogliamo verificare che sia un character device
device1="/dev/ttyS1" # PCMCIA modem card.
if [ -c "$device1" ]
then
echo "$device1 is a character device."
fi
# /dev/ttyS1 is a character device.
-p
, per verificare che sia un pipe
function show_input_type()
{
[ -p /dev/fd/0 ] && echo PIPE || echo STDIN
}
show_input_type "Input" # STDIN
echo "Input" | show_input_type # PIPE
# This example courtesy of Carl Anderson.
-h
, per verificare che sia un symlink, cioè un link simbolico (quello che in Windows chiameremmo "collegamento")-S
, per verificare che sia un socket
Esistono altri operatori, ma vengono usati più raramente e solo per un uso più avanzato, quindi non riempirò la pagina con tutte le possibilità esistenti, ma vi lascio qui la fonte con tutti gli operatori, anche quelli che ho omesso.
Questo post ti è stato utile?
Tieni a mente che questo sito è privo di tracker, analytics e pubblicità, quindi tutela la tua privacy ma non guadagna dalle visite (inoltre, è progettato per avere un impatto ambientale minimo).
Se ti piace questo blog, sostieni le mie riserve di caffeina