Cómo comprobar si existe un archivo o directorio en Bash

27 feb 2021 2 min di lettura
Cómo comprobar si existe un archivo o directorio en Bash
Indice dei contenuti

Introducción

Muchas veces, al escribir scripts de Shell, puede encontrarse en una situación en la que necesite realizar una acción en función de si existe o no un archivo.

En Bash, puede usar el comando de prueba para verificar la existencia de un archivo y determinar el tipo de archivo.

El comando de prueba utiliza una de las siguientes formas de sintaxis:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Si desea que su script sea portátil, debería preferir usar el antiguo [ test que está disponible en todos los shells POSIX. La nueva versión actualizada del [[ (doble paréntesis) es compatible con la mayoría de los sistemas modernos que utilizan Bash, Zsh y Ksh como shell predeterminado.

Compruebe si el archivo existe

Al comprobar si existe un archivo, los operadores FILE más utilizados son -e y -f. El primero verificará si existe un archivo independientemente de su tipo, mientras que el segundo solo devolverá verdadero si el ARCHIVO es un archivo normal (no un directorio o dispositivo).

La opción más legible al comprobar si existe o no un archivo es utilizar el comando de prueba en combinación con la instrucción if. Los siguientes scripts comprobarán si existe el archivo /etc/resolv.conf

FILE=/etc/resolv.conf
 if test -f "$FILE"; then
 echo "$FILE exist"
 fi
FILE=/etc/resolv.conf
 if [ -f "$FILE" ]; then
 echo "$FILE exist"
 fi
FILE=/etc/resolv.conf
 if [[ -f "$FILE" ]]; then
 echo "$FILE exist"
 fi

Si desea realizar una acción diferente en función de si el archivo existe o no, simplemente use la construcción if /then:

FILE=/etc/resolv.conf
 if [ -f "$FILE" ]; then
 echo "$FILE exist"
 else
 echo "$FILE does not exist"
 fi

Utilice siempre comillas dobles para evitar problemas al trabajar con archivos que contengan espacios en blanco en sus nombres.

También puede usar el comando de prueba sin la instrucción if. El comando después del && se ejecutará solo si el estado de salida del comando de prueba es verdadero,

test -f /etc/resolv.conf && echo "$FILE exist"
[ -f /etc/resolv.conf ] && echo "$FILE exist"
[[ -f /etc/resolv.conf ]] && echo "$FILE exist"

Si desea ejecutar una serie de comandos después de que el && simplemente encierre los comandos entre llaves separadas por ; o &&:

[ -f /etc/resolv.conf ] && { echo "$FILE exist"; cp "$FILE" /tmp/; }

Después de &&, la declaración que sigue al

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.