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 😀
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
42 comentarios, deja el tuyo
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.
Cierto 😀
… O_O … Eres Hugo, Hugo de Cuba? … Usando Windows8, WTF!!!
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 😉
man test
Claro.
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..
IF no es un ciclo xD
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 ];
…
Sí, es totalmente válido..
Incluso a través de parámetros.. «*.mp4»
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..
¡Gracias por el feedback y tips! 🙂
Te faltó la f xD
rm -rf $1
Así es más emocionante!
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.
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!.. 😀
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
Te aconsejo el comando find [directorio] [patrón_de_búsqueda] –exec [comando] {}\
No funciona, puse estos archivos en el directorio:
AB20160420.TXT
AB20160421.TXT
AB20160422.TXT
AB20160423.TXT
AB20160424.TXT
AB20160425.TXT
busca.sh
#!/bin/bash
RUTA=/tmp/PRUEBA
cd $RUTA
ls -la | awk ‘{print » «$9}’
if [[ -f AB.TXT ]]; then
echo » Ingreso al IF si existe cualquier AB.TXT»
fi
if [ -f AB20160422.TXT ]; then
echo «ingreso para un archivo AB especifico»
fi
cuando pongo [ -f AB.TXT ] da error
cuando pongo [[ -f AB.TXT ]] no da error pero no encuentra el archivo
sólo funciona cuando pongo un archivo especifico, por ejemplo:
if [ -f AB20160422.TXT ]; then
No logro que funcione con comodines * o ?
#!/usr/bin/env bash
#.encoding=utf-8.
CONTSTANTS
EXIT_OK=0
EXIT_BAD=66
BOLD=»\033[1m»
NC=»\033[0m»
RED=»\033[31m»
if [ ! «$1» ];
then
echo «falta un parámetro»
exit $EXIT_BAD
fi
cd «$1″
files=»ls -h1 $1»
for file in $($files); do
echo -e «puedes hacer cualquier cosa con$BOLD $file$nc aquí»
done
exit $EXIT_OK
@KZ, contá más sobre esto: «y es que al estar adentrándome en el maravilloso mundo de Python»!
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 😀
Muchísimas gracias 😀 justo ayer andaba pensando como hacer esto.
esto con ncurses es genial 🙂
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.
Tremendo aporte , acá desde chile se agradece.
Cada dia mas LINUX me sorprende gratamente,
Viva el Software Libre MIERDAAAA.
sirbe para
verificar si un archivo es de un directorio
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
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.
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
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
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.
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
Muchas gracias kzkggaara muy agradecido.
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.
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).
Hola que tal, me encuentro realizando un trabajo en bash y quisiera saber como verificar si existe un directorio ingresado desde teclado, por ejemplo
#!/bin/bash
read ruta
#Ingreso ~/Desktop
#Luego trato de navegar por ese directorio
cd $ruta
#Me aparece el siguiente mensaje bash: cd: ~/Desktop: No existe el fichero o el directorio
Mi pregunta es ¿Qué puedo hacer para que lo ingrese desde teclado me lo tome como una ruta de un directorio?
Y como puedo saber si existe un grupo,
buenas tengo un problema en mi canaima cuando presiono el boton cunaguaro dice que no existe fichero o directorio como haria para resolver ese problema y del resto no me abre cunaguaro porfavor gracias.
¿Cómo se hace el if en BASH si el nombre del archivo tiene espacios?
Por ejemplo:
Datos mes de Abril.xlsx
Para preguntar si existe el archivo
Carlos, así:
if [[ «$variable» == Datos\ mes\ de\ Abril.xlsx ]] ; then echo ‘coincide’ ; fi
También puedes:
if [[ «$variable» == ‘Datos mes de Abril.xlsx’ ]] ; then echo ‘coincide’ ; fi
Otra opción:
[[ «$variable» == ‘Datos mes de Abril.xlsx’ ]] && echo ‘coincide’ || echo ‘no coincide’
En algunas zonas oscuras de internet recomiendan usar [[ ]] en vez de [ ], y si vas a comparar números entonces: (( variable >= 3 )) && echo ‘variable es mayor o igual que 3’ || echo ‘variable es menor que 3’
Por tanto, para números:
if (( numero != 4 )) ; then echo «${numero} no es 4» ; else echo «${numero} es 4» ; fi
como se puede hacer un código para que valide si el directorio tiene un texto especifico, para poder editarlo.
ejemplo:
if (texto1)
no hacer nada
else
cambiar texto1 por texto2
una duda, como seria para que comprobara cada 15 segundos si existe el fichero o no, gracias.
Hola,
esto:
if [ -w /home/Komun/Logs/ti ]; then
averigua si el archivo es escribible. Pero se basa en los permisos de usuario. ¿Se puede hacer para saber si el grupo o los others tienen permisos?