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. |