logo

Bash comprueba si el archivo existe

La mayoría de las veces, podemos encontrarnos con una situación en la que necesitemos realizar una acción que comprobará si un archivo existe o no.

En Bash, podemos usar un 'comando de prueba' para verificar si existe un archivo y determinar el tipo de archivo.

Las siguientes son las sintaxis del comando de prueba y podemos usar cualquiera de estos comandos:

 test expression [ expression ] [[ expression ]] 

Estamos obligados a utilizar un comando '[' de un solo corchete para que nuestro script sea portátil para todos los shells POSIX. La versión actualizada del comando de prueba contiene corchetes dobles '[[' que se admite en la mayoría de los sistemas modernos que utilizan Bash, Zsh y Ksh como shell predeterminado.

Comprobar si el archivo existe

Al comprobar si existe un archivo, los operadores de archivo más utilizados son -e y -f. La opción '-e' se usa para verificar si un archivo existe independientemente del tipo, mientras que la opción '-f' se usa para devolver un valor verdadero solo si el archivo es un archivo normal (no un directorio o un dispositivo).

La opción más común para comprobar si el archivo existe o no es utilizar el comando de prueba con la 'declaración condicional if'.

A continuación se muestran ejemplos para comprobar si el archivo 'read_file.txt' existe:

Método 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Método 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Método 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Producción

La salida para los tres métodos será la siguiente porque tenemos un archivo (read_file.txt) presente en el directorio:

ejemplos de programación en Python
 read_file.txt exist 

Si queremos realizar una acción que proporcione un resultado basado en si el archivo existe o no, podemos usar la construcción if/then de la siguiente manera:

Ejemplo

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Producción

 read_file.txt exist 

También podemos usar el comando test sin la declaración if. Podemos utilizar cualquiera de los siguientes métodos:

Método 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Método 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Método 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Producción

La salida para los tres métodos será la siguiente porque tenemos un archivo (read_file.txt) presente en el directorio:

 read_file.txt exist 

Si hay varios comandos que se ejecutarán después del operador &&, incluya los comandos entre llaves separadas por punto y coma (;) o AND (&&), es decir:

Ejemplo

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

A diferencia de &&, la declaración después de || El operador se ejecuta solo si el estado de salida del comando de prueba es 'falso'.

Ejemplo

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Producción

 read_file.txt exist 

Estos son los métodos comúnmente utilizados en Bash para verificar si el archivo existe o no.

Comprobar si el directorio existe

El operador '-d' nos permite probar si un archivo es un directorio o no.

Los siguientes son los métodos para verificar si existe el directorio 'Javatpoint':

Método 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Método 2

cadena java a entero
 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Nota:También podemos usar corchetes dobles '[[' en lugar de un corchete simple '['.

Producción

El resultado de ambos métodos anteriores será el siguiente, ya que tenemos un directorio (llamado Javatpoint) presente en la ubicación especificada:

 Javatpoint is a directory 

Compruebe si el archivo no existe

La expresión de prueba se puede negar utilizando el signo de exclamación (! -operador lógico NOT). Mira el siguiente ejemplo:

Ejemplo

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

El script anterior también se puede escribir de la siguiente manera:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Producción

 missing_read_file.txt unavailable 

Operadores de prueba de archivos

Los comandos de prueba incluyen los siguientes operadores de archivos que nos permiten probar tipos particulares de archivos:

-b Devoluciones de archivo 'Verdadero' si el ARCHIVO existe como un archivo especial de bloque.
-c Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un archivo de caracteres especiales.
-d Devoluciones de archivo 'Verdadero' si el ARCHIVO existe como directorio.
-e Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como archivo, independientemente del tipo (nodo, directorio, socket, etc.).
-f Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un archivo normal (no como un directorio o dispositivo).
-G Devoluciones de archivos 'Verdadero' si el ARCHIVO existe y contiene el mismo grupo en el que el usuario ejecuta el comando.
-h Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un enlace simbólico.
-g Devoluciones de archivos 'Verdadero' si el ARCHIVO existe y contiene el indicador set-group-id (sgid).
-k Devoluciones de archivos 'Verdadero' si el ARCHIVO existe y contiene un conjunto de indicadores de bits fijos.
-L Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un enlace simbólico.
-O Devoluciones de archivos 'Verdadero' si el ARCHIVO existe y es propiedad del usuario que ejecuta el comando.
-p Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como una tubería.
-r Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un archivo legible.
-S Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un socket.
-s Devoluciones de archivo 'Verdadero' si el ARCHIVO existe y tiene un tamaño distinto de cero.
-u Devoluciones de archivos 'Verdadero' si el ARCHIVO existe y el indicador set-user-id (suid) está configurado.
-w Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un archivo grabable.
-x Devoluciones de archivos 'Verdadero' si el ARCHIVO existe como un archivo ejecutable.