Hace poco necesitaba yo borrar, en una estructura de directorios, todos los ficheros cuya extensión fuera .class. Estas tareas suelen ser un tedio, pero muy fáciles de solucionar si sabes un poco de shell scripting. El ejemplo es el siguiente:
$ for i in `find . -name '*.class'` ; do echo "Borrando $i ; rm $i ; done
Esto haría la magia en una terminal con intérprete de mandatos bash. Si usais tcsh como yo, la cosa es un poco distinta:
$ foreach i ( ` find . -name '*.class' ` )
foreach? echo "Borrando $i"
foreach? rm $i
foreach?end
Como se ve, en tcsh es un poco menos intuitivo, ya se sabe que para programar, bash es bastante mejor :-), pero el resultado es equivalente.
Para ambas shells (y muchas más)…
find . -name '*.class' -exec rm \{\} \;De na’.
PD: Ejecutar el find una vez sin el exec para ver que se va a borrar por si las flies.
¡Oh Dios! ¡El spam ha empezado! malditos… ¡ah, por cierto! Gracias por el consejo, no conocía la opción -exec. De todas formas lo que yo quería era un sitio para anotar cómo se hacen los bucles en tcsh, que siempre se me olvida (y ya de paso, en bash, aunque de este sí que me acuerdo ;-)).
Pues yo nunca acierto donde poner los dichosos punto y coma, así que ahora lo tengo apuntado en algún sitio gracias a ti.
Gracias.
Lo normal es que se pongan donde iría un salto de línea, aunque por alguna razón el do se lo salta a la torera. De nada
Otro ejemplo:
for i in `ps aux | grep deigote | awk '{ print $2}'` ; do echo "Matando $i" ; kill -9 $i ; done
Para matar a todos los procesos del usuario deigote.
ls | awk '{ m = $0 ; n = "2" $0; system("mv \"" m "\" \"" n "\"")}'Para añadir un 2 al principio del nombre de cada fichero del directorio actual (ojo con alias del tipo ls = ls –color).
¡Ups! eso iba aquí…
for i in `ls` ; do cd $i; mv *ront*.jpg cover.jpg ; cd .. ; donePara cuando tengamos una colección de discos con carátulas tipo Disco chupi guay front.jpg y queramos unificarlas todas a cover.jpg
Para matar a todos los procesos del usuario deigote….
root@pepu:~$ pkill -u deigote
esta en el paquete procps, que supongo que será casi estándar.
root@pepu:~$ dpkg -S pkill
procps: /usr/share/man/man1/pkill.1.gz
procps: /usr/bin/pkill
Gracias por el apunte