marqueta.org
You can't always apt-get what you want
Infosec - Cycling - Estudiantes
RHCE / RHCSA
Once a sysadmin, always a sysadmin
Find, exec y redirecciones en bash
Es habitual la necesidad de lanzar comandos de este tipo: buscar una serie de ficheros y, una vez encontrados, escribir en cada uno de ellos determinada cadena. Un ejemplo práctico sería buscar los ficheros scheduler para dispositivos de disco y escribir en ellos el nombre del elevator deseado.
Lo que pide el cuerpo es hacer algo así:
find /sys/block/sd*/queue -maxdepth 1 -name scheduler \
-exec echo "noop" > {} \;
Algo no cuadra, ¿verdad? Esa redirección no tiene buena pinta. De hecho, lo más probable es que terminemos con un fichero de nombre “{}” en el directorio actual con tantas líneas “noop” como dispositivos encontrados
Hay varias alternativas pero la más sencilla es la siguiente:
find /sys/block/sd*/queue -maxdepth 1 -name scheduler \
-exec sh -c 'echo "noop" > {}' \;
La redirección se interpretará correctamente y obtendremos el resultado deseado.