Tutoriales

¿Cómo verificar si existe un directorio o archivo en un script de shell Bash?

Un usuario de Linux me preguntó: Estoy creando un guion bash quiero estar en eso Controlar si un Tabla de contenido o archivo enviado a la máquina del usuario, después de obtener el resultado, se debe ejecutar el siguiente comando o función.

Sí, es posible verificar si un archivo o directorio se presenta al sistema de archivos usando una declaración condicional en un script bash.

Así que déjame mostrarte cómo usar este artículo para encontrar un directorio o archivo que existe en tu sistema con una declaración condicional if, antes de eso, te presentaré una test Los comandos te ayudarán a entender la lógica más claramente.

Use los comandos de prueba y eco para comprender los códigos de estado 0 y 1

En las secuencias de comandos de Bash, la declaración if funciona de manera un poco diferente a otros lenguajes de programación, actúa sobre el estado o el valor devuelto.

Si el estado del comando pasa a ser «0», significa que el comando se ejecutó con éxito, el resultado es válido y no hay error, pero si el código de estado no es 0, significa que el comando se ejecutó incorrectamente o no hay error. Puede ser un problema con la ejecución.Verifique el código de estado a través del manual del programa.Se puede identificar correctamente.

En Linux, hay una utilidad que puede usar para distinguir si un archivo existe en el sistema especificando diferentes tipos de opciones de archivo, pero el problema es que incluso si el comando se ejecuta con éxito, no obtiene resultados.

La única forma de saber si un comando se ejecutó correctamente es ejecutar echo Ordenarque mostrará el código de estado del comando anterior.

Si el código de estado le muestra 0, Esto significa que el comando se ejecutó con éxito y el archivo o directorio existe en su sistema, pero si dice 1lo que indica que el comando se ejecutó con éxito pero el archivo no existe o hubo un problema durante la ejecución.

Lista de opciones para verificar si el archivo existe

Aunque sabe que todo en Linux es un archivo y puede mantener el mismo nombre de archivo para varios archivos, ¿cómo diferencia los tipos de archivo cuando ejecuta un comando? Para manejar esta situación, Linux proporciona varias opciones que puede usar en un script bash o terminal.

Algunas opciones se enumeran a continuación:

-d: cuando desee comprobar un el directorio existe
-e: cuando solo quieres comprobar un El archivo ya existe
-f: cuando desee comprobar un existe un archivo normal
-L: cuando desee comprobar un existe un enlace simbólico

Ahora veremos cómo usar las opciones anteriores en comandos de prueba y scripts de bash.

Veamos cómo usar test Ordenar Utilice las opciones anteriores para buscar archivos que existen en su sistema. Como sabe, incluso si se encuentra el archivo, no obtendrá el resultado. Entonces puede verificar el estado con el comando echo, que determinará el resultado.

Para explicártelo mejor, déjame ejecutar el siguiente comando en la pantalla de la terminal:

$ test -e /tmp/
$ echo $?

La salida del comando anterior.

Probar la salida del comando cuando existe el archivo

El código de estado anterior es 0, lo que significa que el archivo existe en mi sistema.

¿Cuál sería el comportamiento o el código de estado si mencionamos un archivo que no existe en mi sistema? Averigüémoslo llamando al siguiente comando en la pantalla del terminal:

$ test -e trendoceans.txt
$ echo $?

La salida del comando anterior.

Comando de prueba de salida cuando el archivo no existe
Comando de prueba de salida cuando el archivo no existe

Entonces prueba el código de estado. 1, Esto significa que el archivo no existe en mi sistema.

Espero que puedas entender cómo funciona. Veamos cómo usar las siguientes opciones para determinar si un archivo está en el sistema a través de un script bash.

Para directorios:

En ocasiones, es posible que desee comprobar si existe un nombre específico de un directorio en el sistema correspondiente.

Como sabe, puede establecer el mismo nombre de archivo para los nombres de directorio y los archivos normales, lo que puede causar conflictos al ejecutar scripts.Entonces, para evitar esto, puedes usar -d opción, solo buscará directorios.

¿Cómo saber si existe un archivo de directorio en Bash?

Cuando desee verificar si existe un directorio en su sistema a través de la terminal, ejecute el siguiente código, que imprimirá «¡Directorio encontrado!» Si el directorio especificado se encuentra en la ubicación que mencionó.

Como sabes, -d Se utiliza para consultar directorios.

sintaxis

[ -d  ] && echo "Directory found!"

Por ejemplo, si desea comprobar si /tmp el directorio existe, simplemente reemplace con el nombre de archivo real.

Comprobar si el directorio existe en la terminal
Comprobar si el directorio existe en la terminal

Si desea lograr lo mismo usando el script bash, consulte el siguiente fragmento de código:

if [ -d /tmp/ ]; then
    echo "Directory found!"
fi-

¿Cómo encontrar si un archivo de directorio no existe en Bash?

Lo que es más importante, lo que aprendió es verificar si el archivo existe, pero ¿qué pasa si el archivo no existe?En este caso debes usar "!"que invierte toda la condición e imprime un error si el archivo no existe.

sintaxis

[ ! -d  ] && echo "Directory not found!"

Por tu bien, déjame configurar cualquier nombre de archivo aleatorio en su lugar «Nombre del archivo»y ejecute los siguientes comandos.

[ ! -d random ] && echo "Directory not found!"

Comportamiento del comando anterior

directorio no encontrado
directorio no encontrado

Podemos hacer lo mismo con un script bash. Todo lo que necesita hacer es copiar y pegar la siguiente línea en su archivo de script y cambiar el nombre del archivo al correcto.

if [ ! -d random ]; then
    echo "Directory not found!"
fi

Reunamos todos los comandos y creemos un script corto que se imprimirá «¡Directorio encontrado!» Si el directorio existe, de lo contrario arroja «¡No se puede encontrar el directorio!»

#/bin/bash

if [ -d /tmp ]; then
    echo "Directory found!"
else
   echo "Directory not found!"
fi

Para archivos regulares:

En la sección anterior, aprendió cómo decirles a los usuarios que el directorio correspondiente no existe en su sistema, y ​​también puede verificar si los archivos regulares como texto, imágenes, videos o cualquier otra cosa existen en el sistema a través de un script bash.

¿Cómo puedo saber si existe un archivo normal en Bash?

Primero, comience con un ejemplo simple. Si desea verificar si un archivo determinado existe en las siguientes ubicaciones en su sistema, use el siguiente comando.

[ -f  ] && echo "File found!"

Como sabes, revisa archivos regulares, necesitamos usar -F opción, se podría decir que es un acrónimo normal documento.

Por ejemplo, quiero imprimir «¡Archivo encontrado!» si sshd_config Los archivos existen en las siguientes ubicaciones.

[ -f /etc/ssh/sshd_config ] && echo "File found!"

El comportamiento del comando anterior.

Comprobar si existe un archivo regular
Comprobar si existe un archivo regular

Puede intentar lo mismo en un script bash para verificar si el archivo correspondiente existe en el sistema del usuario. Para probarlo, puede crear un archivo de secuencia de comandos bash de muestra y copiar el siguiente código, que imprimirá el resultado si el archivo existe.

if [ -f /etc/ssh/sshd_config ]; then
    echo "File found!"
fi

Cómo saber si un archivo regular no existe en Bash

Alternativamente, puede usar el siguiente comando para verificar si el archivo regular especificado no existe a través de la propia terminal.

sintaxis de comandos

[ ! -f  ] && echo "File not found!"

déjame intentar ver si el archivo océano de marea se puede usar en /etc/ssh Si no se encuentra, entonces debería imprimir «archivo no encontrado».

$ [ ! -f /etc/ssh/trendoceans ] && echo "File not found!"
archivo no encontrado
archivo no encontrado

Puede usar la condición anterior en un script bash para verificar si no existe un archivo normal.

if [ ! -f /etch/ssh/trendoceans.txt ]; then
    echo "File not found!"
fi

El problema con el código anterior es que solo imprime la salida si el archivo no existe, pero quiero que el usuario sea notificado cuando el archivo también exista. Ok, permítanme compartir con ustedes otro fragmento de código que imprimirá la salida según la condición dada.

#/bin/bash

if [ ! -f /tmp/trendoceans.txt ]; then
    echo "File not found!"
else
   echo "File found!"
fi

Para archivos con enlaces simbólicos:

Anteriormente, aprendió cómo verificar la existencia de directorios y archivos en su sistema con un script bash, ahora aprenderá cómo usar un script bash para encontrar enlaces simbólicos.

Cómo verificar si existe un enlace simbólico o símbolo en Bash

Para buscar enlaces simbólicos o enlaces simbólicos, utilice -L, El resultado solo se mostrará si el archivo correspondiente es un enlace suave. Si desea crear un nuevo enlace simbólico, siga este artículo.

[ -L  ] && echo "Symbolic link found"

déjame crear un enlace simbólico /tmp directorio a la ruta actual, luego ejecute el siguiente comando para verificar si hay enlaces simbólicos.

$ ln -s /tmp sym-tmp
$ [ -L sym-tmp ] && echo "Symbolic link found"
Compruebe si existe un archivo de símbolos a través del script bash
Comprobar archivos de símbolos Existe en guion bash

Para scripts bash puede usar el siguiente código:

if [ -L sym-tmp ]; then
    echo "Symbolic link found!"
fi

Cómo saber si un archivo de símbolos no existe en Bash

añadir negación "!" operador junto a -L Encuentre archivos de símbolos que no existen en Bash.

$ [ ! -L  ] && echo "Symbolic link found"

Puede usar el siguiente código para comprobar si no existe un archivo de símbolos en un script de Bash.

if [ ! -L sym-tmp ]; then
    echo "Symbolic link found!"
fi

Si desea crear un script corto que pueda probar la funcionalidad, copie y pegue el siguiente código:

#/bin/bash

if [ ! -L sym-tmp ]; then
    echo "Symbolic link file not found!"
else
   echo "Symbolic link file found!"
fi

envolver

¡Eso es todo por ahora!

En este artículo, aprendió a usar un script de shell para verificar la existencia de archivos regulares, directorios o archivos con vínculos suaves en el sistema de un usuario.

Para obtener más información, puede suscribirse a nuestro boletín de noticias para recibir actualizaciones semanales.

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Botón volver arriba