Bucles en la terminal
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.
Parecidos razonables
-
Could not find compatible GRE between version 1.9.1.8 and 1.9.1.8 al arrancar Firefox
May 6, 2010
2 -
Si la salida fuese un Excell, lo llamaríamos ingeniería del software
December 11, 2008
10 -
Creando ficheros tipo JAR de Java en Unix (sólo clases)
October 31, 2007
3 -
Refréscame esa caché
January 2, 2009
9 -
Any to mp3
September 6, 2005
1
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.
Pingback: spam tocagüevos
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 .. ; done
Para 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 😎
Sé que esto es de hace años y tal, pero no has cerrado las ” en el echo.
Nunca es tarde si el bug es bueno 🙂 ¡gracias!