Come verificare se un file o una directory esiste in Bash

Molte volte durante la scrittura di script Shell, potresti trovarti in una situazione in cui devi eseguire unazione in base allesistenza o meno di un file .

In Bash, puoi utilizzare il comando test per verificare se esiste un file e determinare il tipo di file.

Il comando test assume una delle seguenti forme di sintassi:

Se desideri che il tuo script sia portabile, dovresti utilizzare il vecchio test ; then echo "$FILE exists."fi

Se vuoi eseguire unazione diversa a seconda che il file esista o meno semplicemente usa il costrutto if / then:

Usa sempre virgolette doppie per evitare problemi quando si tratta di file contenente spazi bianchi nei loro nomi.

Puoi anche usare il comando test senza listruzione if. Il comando dopo loperatore && verrà eseguito solo se lo stato di uscita del comando di prova è vero,

Se lo desideri esegui una serie di comandi dopo loperatore && racchiudi semplicemente i comandi tra parentesi graffe separati da ; o &&:

opposta a &&, la dichiarazione dopo Loperatore || verrà eseguito solo se lo stato di uscita del comando di prova è false.

Controlla se la directory esiste #

Gli operatori -d ti consentono di verificare se un file è un directory o meno.

Ad esempio per verificare se la directory /etc/docker esiste, dovresti utilizzare:

Puoi anche utilizzare le doppie parentesi graffe ; then echo "$FILE does not exist."fi

Come sopra:

Controlla se esistono più file #

Invece di usare complicati costrutti if / else annidati puoi usare -a (o && con ; then echo "Both files exist."fi

Varianti equivalenti senza utilizzare listruzione IF:

Operatori di test dei file #

Il comando test include i seguenti operatori FILE che consentono di testare particolari tipi di file:

  • -b FILE – Vero se il FILE esiste ed è un file di blocco speciale.
  • -c FILE – Vero se il FILE esiste ed è un file di caratteri speciali.
  • -d FILE – Vero se il FILE esiste ed è una directory.
  • -e FILE – Vero se il FILE esiste ed è un file, indipendentemente dal tipo (nodo, directory, socket, ecc.).
  • -f FILE – Vero se il FILE esiste ed è un file normale (non una directory o un dispositivo).
  • -G FILE – Vero se il FILE esiste e ha lo stesso gruppo dellutente che esegue il comando.
  • -h FILE – Vero se il FILE esiste ed è un collegamento simbolico.
  • -g FILE – Vero se il FILE esiste e ha set-group-id (sgid) impostato.
  • -k FILE – Vero se il FILE esiste e ha impostato un flag di sticky bit.
  • -L – Vero se il FILE esiste ed è un collegamento simbolico.
  • -O FILE – Vero se il FILE esiste ed è di proprietà dellutente che esegue il comando.
  • -p FILE – Vero se il FILE esiste ed è una pipe.
  • -r FILE – Vero se il FILE esiste ed è leggibile.
  • -S FILE – Vero se il FILE esiste ed è un socket.
  • -s FILE – Vero se il FILE esiste e ha dimensioni diverse da zero.
  • -u FILE – True se il FILE esiste e set-user-id (suid) è impostato.
  • -w FILE – Vero se il FILE esiste ed è scrivibile.
  • -x FILE – Vero se il FILE esiste ed è exe tagliabile.

Conclusione #

In questa guida, ti abbiamo mostrato come controllare se un file o una directory esiste in Bash.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *