-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Gerardo Herzig escribió:
Nacho wrote:
Gerardo Herzig escribió:
Nacho wrote:
Gerardo Herzig escribió:
Nacho wrote:
Hola a todos, necesito un comando que busque recursivamente en un directorio todos los archivos que tengan la extendion .f y que de ellos selecciones los que contengan una cadena de texto y estos los copie a otro directorio y los renombre con la extensión .msf Muchas gracias A ver...capaz algo asi (untested) PUNTO_DE_PARTIDA=/home/files/ CADENA_A_BUSCAR="texto_loco" DIR_DONDE_COPIAR=/tmp/destino/ cd $PUNTO_DE_PARTIDA for archivo in `find -type f -name "*.f"` do grep $CADENA_A_BUSCAR $archivo && cp $archivo $DIR_DONDE_COPIAR/$archivo.msf done Podria ser lo que buscas. Saludos. Gerardo Si esto es, solo que el punto de partida son muchos directorios dentro de otro, como podemos hacer esto de forma recursiva, son 95 directorios denominados recup_dir.1 y asi sucesivamente hasta el recup_dir.95 Gracias /Nacho Entonces haz que el punto de partida sea el directorio que contiene a todos esos! Si recup_dir.1..recup_dir.95 estan dentro de, digamos recup_dir, entonces recup_dir seria el 'punto de partida' Saludos. Gerardo
Vamos por partes, el archivo script utilizado es el siguiente:
#! /bin/bash -x echo "alla vamos !"
# definicion de variables PUNTO_DE_PARTIDA=/seguridad CADENA_A_BUSCAR="ernesto" DIR_DONDE_COPIAR=/seguridad/mas
# empieza el programa # situandonos en el directorio a escanear cd $PUNTO_DE_PARTIDA
# ahora hacemos un bucle buscando los ficheros que acaban en .f # y los copiamos al dir. ernesto y añadimos la ext .msf
for archivo in `find . -type f -name "*.f"` do grep -li $CADENA_A_BUSCAR $archivo && cp $archivo $DIR_DONDE_COPIAR/$archivo.msf done
Bueno pues la busqueda si que la hace de manera recursiva, es decir busca en todos los directorios desde /seguridad en adelante, y encuentra los archivos, pero a la hora de cambiarles el nombre y copiarlos a otro directorio falla, las rutas las he comprobado y son correctas, ademas si lo haces directorio por directorio funciona, alguna idea?? Gracias /Nacho Seria de ayuda saber que dice *exactamente* la salida del comando. Viendo un poquito el programa, tal vez sea necesario sacar el path del archivo que estas copiando, tal vez este tirando errores de directorios inexistentes.
Proba modificar la linea "algida" por algo asi grep -li $CADENA_A_BUSCAR $archivo && cp $archivo$DIR_DONDE_COPIAR/`basename $archivo`.msf
Que hace basename? Pues
comechingon:~ # basename /home/pepe/lalala.txt lalala.txt
Tal vez venga por ahi la cosa, sino copia y pega el mensaje de error.
Gerardo
Gracias, solucionado, al final el script ha quedado asi: #! /bin/sh echo "" echo "Alla vamos !" # definicion de variables PUNTO_DE_PARTIDA=/home/gloriyedu/pruebas CADENA_A_BUSCAR="ernesto" DIR_DONDE_COPIAR=/home/gloriyedu/pruebas/ernesto # empieza el program # situadonos en el directorio a escanear cd $PUNTO_DE_PARTIDA echo "" echo "estamos en" $PUNTO_DE_PARTIDA # creamos el fichero ficheros_encontrados touch ficheros_encontrados # y ahora hacemos la busqueda de los ficheros *.f find . -type f -name "*."f > ficheros_encontrados echo "" echo "------------------" wc -l ficheros_encontrados echo "" cat ficheros_encontrados echo "------------------" echo "" echo "los ficheros conteniendo la cadena" $CADENA_A_BUSCAR for archivo in ` cat ficheros_encontrados ` do grep -li $CADENA_A_BUSCAR $archivo && cp -f $archivo $DIR_DONDE_COPIAR
/dev/null done
echo "" echo "ahora solo queda renombrar" rename .f .msf ernesto/*.f -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.9 (GNU/Linux) Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org iEYEARECAAYFAkq71tEACgkQDoK71SWnshWaGwCfQsWqdN+gZietbX6Algiv40m3 9XkAn2BtVn/ovhqp89Ej1KV5ufohiDn/ =9YaV -----END PGP SIGNATURE----- -- Para dar de baja la suscripción, mande un mensaje a: opensuse-es+unsubscribe@opensuse.org Para obtener el resto de direcciones-comando, mande un mensaje a: opensuse-es+help@opensuse.org