Comprobar si un archivo o carpeta existe o no (y más) con ciclo IF

Hace rato no pongo nada de Bash, y es que al estar adentrándome en el maravilloso mundo de Python he olvidado un poco a este otro amigo que tanto me ayudó :)

Aquí les pongo algo a los entusiastas de Bash, como bien dice el título… les mostraré cómo comprobar si existe o no un archivo o carpeta en el sistema, solo usando: if

Vamos a crear un archivo .sh y darle permisos de ejecución, para ello basta con poner el siguiente comando en una terminal:

touch prueba.sh && chmod +x prueba.sh

Esto lo que hizo es crear el archivo (touch prueba.sh) y además darle permisos de ejecución (chmod +x prueba.sh)

Luego escribamos lo siguiente en él:

if [ -d /opt/ ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

¿Qué hace esto?

Simple :D

En la primera línea -» if [ -d /opt/ ];

Aquí preguntamos, ¿existe el directorio /opt/? Sí directorio/carpeta, pues el -d significa directorio o carpeta.
Luego en caso de que exista imprimiremos en la terminal “Sí, sí existe.” (esto es la línea 2 y 3)
En caso contrario y NO exista /opt/, entonces imprimiremos “No, no existe” (línea 4 y 5)
Luego en la última línea (la número 6) cerramos el if y listo.

Hagan la prueba, les mostrará que /opt/ sí existe.

Si desean que les muestre el otro texto (el de que no existe) cambien /opt/ por cualquier otra carpeta que no exista en su sistema, por ejemplo: /asd/

Como ven, -d nos sirve para saber si el directorio existe, bien ahora si cambiamos -d por -f es para comprobar existencia de archivos (-d = directorio, -f = file/archivo)

Por ejemplo:

if [ -f /etc/hosts ];
then
echo "Sí, sí existe."
else
echo "No, no existe"
fi

Aquí el listado de las opciones:

-d -» Comprobar si existe determinado directorio

-f -» Comprobar si existe determinado archivo

-w -» Comprobar si determinado archivo tiene permisos de escritura

-x -» Comprobar si determinado archivo tiene permisos de ejecución.

Y bueno no hay mucho más que agregar :)

Sé que esto le será muy útil e interesante para aquellos que gustan de programar en Bash ;)

Saludos


KZKG^Gaara

KZKG^Gaara: Usuario de GNU/Linux y administrador de red desde hace algunos años. Intento mantenerme en el lado oscuro de la fuerza, pues es donde está lo divertido de la vida. Administrador y Fundador de todo esto que ven, pero uno más dentro de la familia.


30 comentarios en “Comprobar si un archivo o carpeta existe o no (y más) con ciclo IF

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *

  1. Otra forma de hacerlo sin if…then..else :

    test -f /etc/hosts && elcomando

    O también

    test ! -f /etc/hosts && echo "no se encontró el archivo"

    Etcétera.

    1/30
    • Cierto :D
      … O_O … Eres Hugo, Hugo de Cuba? … Usando Windows8, WTF!!!

      2/30
      • Pues si, me estoy familiarizando con este OS y si he de serte franco, lo único que le he encontrado útil es el gestor de copias, por lo demás personalmente me parece una plasta, especialmente su interfaz híbrida y las aplicaciones de metro. Me gusta menos que el Vista y el 7 (aunque sea un poco mas eficiente que estos), que tampoco me gustaban. Para lo único que lo estoy usando es para jugar NFS13 y Skyrim, pero este OS se lleva tanto espacio que tuve que eliminar mi partición de Linux [snif].

        No obstante, para tu tranquilidad, te comento que anteayer descargué el ISO de Arch de enero y pienso darle una probadita en su versión x86-64, en cuanto consiga el repo (de casualidad lo tendrás?). Ahora que segun vi usa por defecto paquetes firmados, me da mayor confianza zambullirme.

        Y además mi padre me dijo que me mandaría un Sony Xperia, que quiero aprovechar para aprender algo de programación para Android, que era un deseo pendiente. Así que tranquilízate, aun no me he pasado al lado oscuro de la fuerza, buahahahaha ;)

        6/30
  2. man test

    3/30
  3. Wenas!..

    Podríamos hacer uno igual.. ..pero que el directorio sea pasado por parámetro..

    if [ -d $1 ];
    then
    echo "Sí, sí existe."
    else
    echo "No, no existe"
    fi

    Y lo llamamos como:

    ./prueba.sh /opt/

    Saludo..

    4/30
  4. IF no es un ciclo xD

    5/30
  5. Me viene como anillo al dedo para un script que estoy haciendo. ¿Es válido usar comodines? Por ejemplo, para saber si existe algún .mp4 entonces ejecutar algo sobre ellos.

    if [ -f *.mp4 ];

    7/30
    • Sí, es totalmente válido..

      Incluso a través de parámetros.. “*.mp4″

      8/30
      • Por ejemplo,

        if [ -f $1 ];
        then
        rm -r $1
        else
        ls
        fi

        Si lo llamas: ./prueba.sh *.mp4

        Si encuentra archivos .mp4 los borra.. ..sino te lista los archivos de ese directorio..

        9/30
      • ¡Gracias por el feedback y tips! :-)

        10/30
      • Te faltó la f xD

        rm -rf $1

        Así es más emocionante!

        13/30
      • Maravilloso!!!, Cada día me enamoro más de Linux, Windows ha quedado relegado en algún rincón oscuro de mi Disco Duro, al cual esta a punto de ser borrado para dar paso a la luz de Linux.

        15/30
      • Excelente!.. ..entonces haz el siguiente paso..y sácalo..

        Hace 6 meses aprox. que tengo en todas mis máquinas sólo GNU/Linux y no necesito de más.. ..ni de W$..ni Wine.. ..y soy más que feliz así.. ;)

        Y voy contagiando a mis alrededores..ya que todos me ven con mi Arch, rápido, eficiente y feliz.. ..y me piden que les instale Linux.. ..yeah!.. :D

        16/30
      • Tambien puedes comprobrarlos por varias extensiones , puedes usar algo como

        #!/bin/bash
        Directorio=$HOME/Descargas

        if [ $Directorio ]; then
        echo “A Continuacion una Lista de Archivos Tipos :”
        echo “mp1 , mp2 , mp3 , mp4 , wav , flac , flaad , aud , midi”
        ls {*.mp?,*.wav,*.fla,*.aud*.midi}
        fi

        el usar {} te permite especificar varias extensiones en este caso , el uso de “?” , es un comodin , que le permite tomar “Cualquier Caracter”.

        Espero que les sirva

        25/30
  6. @KZ, contá más sobre esto: “y es que al estar adentrándome en el maravilloso mundo de Python”!

    12/30
    • JAJAJAJA nah… poco a poco :)
      Aún soy solo un novato en Python, casi no tengo tiempo ya para dedicarle horas y horas, por lo que voy lento sí, lento pero seguro en mi aprendizaje :D

      17/30
  7. Muchísimas gracias :D justo ayer andaba pensando como hacer esto.

    14/30
  8. esto con ncurses es genial :)

    18/30
  9. en 1 palabra… ¡EXCELENTE!
    Hace mucho que estaba perfeccionando un script para realizar descargas desde Internet, pero me encontraba con el problema de que descargaba los archivos que le pedía 1 y otra vez sin poder comprobar la existencia 1ro.
    Muy buen tuto.

    19/30
  10. Tremendo aporte , acá desde chile se agradece.
    Cada dia mas LINUX me sorprende gratamente,
    Viva el Software Libre MIERDAAAA.

    20/30
  11. sirbe para
    verificar si un archivo es de un directorio

    21/30
  12. si deseo comprobar la existencia de un fichero cualquiera en una ruta “/tmp/receptores” me ejecute un comando cualquiera, como seria?

    les estare muy agradecido

    Saludos

    22/30
  13. Estimados, y para determinar mendiante IF si el archivo se encuentra poblado en su totalidad ???. Lo pregunto debido a que cuando estas llenando el archivo por una transmision, este lo puede tomar incluso con la mitad de los datos.

    Saludos y gracias por la respuesta.

    23/30
  14. Bueno creo que tambien debiste agregar de ejemplo , como “Comprobrar que no existe” un “archivo” o “directorio” como por ejemplo

    para comprobrar que NO existe , por ejemplo usar una variable->

    Un Directorio

    #!/bin/bash
    Directorio=”$HOME/Directorio de Prueba”
    Archivo=”$HOME/Archivo de Prueba”

    if [ ! -d "$Directorio" ]; then
    echo “No existe $Directorio”
    echo “Creando -> “$Directorio”
    mkdir “$Directorio”
    else
    echo “El Directorio “$Directorio” ya existe
    fi

    if [ ! -d "$Archivo" ]; then
    echo “No existe $Archivo”
    echo “Creando -> “$Archivo”
    touch “$Archivo”
    else
    echo “El Archivo “$Archivo” ya existe
    fi

    24/30
    • cuando hagas el mkdir fijate después si la terminal lo pudo crear porque puede romper las bolas si es una carpeta como root o de sistema hhah

      26/30
  15. Firefox 28.0GNU/Linux x64
    Julio Vinachi

    Saludos KZKG^Gaara una consulta como haria para usar curl . quisiera saber como hago desde consola que haga un ping a una url para ver si esta disponible por ejemplo http://portal.com/directorio/archivo1.php en donde el archivo1 me estara almacenando las ip de visitas es para el monitoreo de un equipo que necesito que haga ese pin cada media hora para que me tenga al tanto de la ip publica ya que cambia cada cierto tiempo y no me puedo conectar por ssh.

    Saludos gracias de antemano que Dios te bendiga.

    27/30
    • Hola que tal,

      Primero, tienes que decir que la variable IP (por ejemplo) es el contenido de ese archivo, para ello hay que:
      1. Descargar el archivo
      2. Ver su contenido y sacar de ahí la IP
      3. Que esa IP sea la variable

      Por ejemplo:
      Aquí bajamos el archivo -» wget http://portal.com/directorio/archivo1.php -o file.html
      Luego asignamos a una variable su contenido: -» : ${IP:=`cat file.html`}
      .. suponiendo que el contenido de ese archivo solo tenga la IP, si no es así, habría que trabajar con grep, awk o head.

      Una vez tengas ya la IP como una variable, el resto es lo más simple del mundo :)

      Si quieres me escribes al email (kzkggaara[at]desdelinux[dot]net) que con gusto te ayudo

      28/30
  16. Hola, no entiendo mucho sobre informática y tampoco sé si esta entrada va relacionada con el problema que tengo.

    Os comento por si me léeis, a pesar de que es de hace un año el post:
    Resulta que cree una carpeta en mi escritorio para almacenar unos vídeos. Bien, esos vídeos los borré porque ya no me hacían falta y ahora esta carpeta me dice que no existe (a pesar de que está en mi escritorio visible).

    - Ese es el primer problema que tengo:
    No puedo borrar la carpeta.

    - Segundo problema y creo que más importante:
    En un intento de borrar la carpeta, metí una carpeta de FOTOS. Ahora, cuando abro la carpeta que “no existe” está vacía y las FOTOS no están.

    ¿Cómo puedo recuperar las fotos? He dado a la opción dentro de la carpeta “Mostrar documentos ocultos” pero no aparecen la carpeta de las FOTOS.

    Espero que podáis saber cómo se soluciona.
    Gracias.

    29/30
    • Hay dos usuarios que son los principales.: root y tu_usuario (natalia por ejemplo). Ambos tienen carpetas personales. tu_usuario en /home y root en / (directorio raíz). Haciendo click derecho sobre la carpeta fijate a quien pertenece. Si es a root con tu gestor de archivos utilizando sudo o gksu o kdesu dependiendo del entorno que uses ve al directorio raíz -> root -> Desktop y rpobablemente encuentres las fotos y puedas borrar la carpeta. Algunas distros cuando no eres el propietario del archivo o directorio y no tienes permisos de acceso te dicen directorio/archivo no existente. Si el propietario eres tú y no root haces lo mismo con el gestor de archivos con sudo, etc y vas al directorio raíz -> /home -> carpeta_personal -> Desktop y ves si allí están las fotos y si puedes borrar la carpeta.
      Si esto no funciona habrá que ver otras opciones desde el terminal (consola).

      30/30

Deja un comentario

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

Puedes usar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Current day month ye@r *