Linux/Unix Shell Scripting - Duda con script de búsqueda y salida

   
Vista:

Duda con script de búsqueda y salida

Publicado por Jdomgo3 (15 intervenciones) el 20/06/2011 11:45:05
Hola buenos días a todos. Me gustaría que alguien me dijera cómo puedo hacer un script para que imprima con "echo" cada directorio que NO contiene un archivo llamado "archivo.txt".

Tenemos el siguiente árbol de directorios:

/scripts/directorio1/dir1
/scripts/directorio1/dir2
/scripts/directorio1/dir3/archivo.txt
/scripts/directorio1/dir4
/scripts/directorio1/dir5

El script se llamaría por ejemplo "busca.sh" y se encontraría en directorio /scripts y he pensado que primero podría hacer una función que me obtenga el nombre del directorio que SI contiene el archivo llamado "archivo.txt".

######################################
si_contiene () {
VAR1=$(find ./directorio1 -name archivo.txt)
VAR2=`echo $VAR1 | cut -d'/' -f3`

echo "${VAR2}"
}

si_contiene
######################################

No se muy bien como seguir, se me ocurre hacer un ls -lrt de /scripts/directorio1 y pasarlo a una variable, y luego eliminarle el nombre del directorio que si contiene el archivo "archivo.txt".

Lo que necesitaría realmente es que cada uno de esos directorios que NO contiene el archivo se impriman en forma de lista, sean 2, 3, 4, o 5 directorios.

¿alguna idea?

Un saludo y muchas gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Duda con script de búsqueda y salida

Publicado por Jdomgo3 (15 intervenciones) el 20/06/2011 12:12:02
Se me ocurre los siguiente, pero estoy seguro que hay mejores formas de hacerlo:

######################################
si_contiene () {
VAR1=$(find ./directorio1 -name archivo.txt)
VAR2=`echo $VAR1 | cut -d'/' -f3`

ls directorio1 > ls.txt
VAR3=$(grep -v ${VAR2} ls.txt)
rm -fr ls.txt

echo ${VAR3}
}
si_contiene
######################################
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con script de búsqueda y salida

Publicado por Jdomgo3 (15 intervenciones) el 20/06/2011 12:23:33
Me estoy dando cuenta de que he llamado "si_contiene" a una función que lo que saca es un directorio que NO contiene un archivo, jejeje. Las prisas... he depurado un poco el script, pero supongo que habrá mejores maneras de hacerlo:

######################################
no_contiene () {
VAR1=`find ./directorio1 -name archivo.txt`
VAR2=`echo $VAR1 | cut -d'/' -f3`

ls directorio1 > ls.txt
grep -v ${VAR2} ls.txt
rm -fr ls.txt
}
no_contiene
######################################

¿se os ocurre algo mejor?

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con script de búsqueda y salida

Publicado por Jdomgo3 (15 intervenciones) el 20/06/2011 12:59:41
Un poco mejorado:

######################################
#!/bin/bash

#Funciones
si_contiene () {
VAR1=`find ./directorio1 -name archivo.txt`
VAR2=`echo $VAR1 | cut -d'/' -f3`
echo "Lista de directorios que no contienen archivo.txt:"
echo "${VAR2}"
echo ""
}
no_contiene () {
VAR1=`find ./directorio1 -name archivo.txt`
VAR2=`echo $VAR1 | cut -d'/' -f3`
ls directorio1 > ls.txt
echo "Lista de directorios que contienen archivo.txt:"
grep -v ${VAR2} ls.txt
rm -fr ls.txt
echo ""
}

#Inicio
si_contiene
no_contiene
######################################

Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con script de búsqueda y salida

Publicado por Isaac (5 intervenciones) el 21/06/2011 20:54:18
find /scripts/ -type d | while read dir ; do [ -f "$dir/archivo.txt" ] && echo "si contiene $dir" || echo "no contiene $dir"; done
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Duda con script de búsqueda y salida

Publicado por Jdomgo3 (15 intervenciones) el 22/06/2011 08:53:45
Muchas gracias Isaac, tu script funciona pero la salida que tiene es:

no contiene scripts/
no contiene scripts/directorio1/
no contiene scripts/directorio1/dir2
si contiene scripts/directorio1/dir3
no contiene scripts/directorio1/dir1

y lo que necesito es que me diga el nombre del último directorio que contiene o no contiene el archivo. De todos modos me vale para otra cosa que necesito. Muchas gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar