Bueno, la advertencia obvia: Se va a borrar directorios llamados CVS, independientemente de si son o no los directorios CVS.
Puede convertirlo en un guión bastante facilidad:
#!/bin/sh
if [ -z "$1" ]; then
echo "Usage: $0 path"
exit 1
fi
find "$1" -name 'CVS' -type d -print0 | xargs -0 rm -Rf
# or find … -exec like you have, if you can't use -print0/xargs -0
# print0/xargs will be slightly faster.
# or find … -exec rm -Rf '{}' + if you have reasonably modern find
edición
Si desea hacerlo más seguro/más a toda prueba, que podría hacer algo como esto después de que el primero si/fi bloque (hay varias maneras de escribir esto):
⋮
case "$1" in
/srv/www* | /home)
true
;;
*)
echo "Sorry, can only clean from /srv/www and /home"
exit 1
;;
esac
⋮
usted puede hacer que sea tan elegante como desee (por ejemplo, en lugar de abortar, que podría llevar a que si realmente pretende hacer eso). O puede hacer que resuelva caminos relativos, por lo que no tendrá que especificar siempre una ruta completa (pero, de nuevo, tal vez quiera eso, para estar más seguro).
La principal preocupación con el uso de xargs como este es que con suficientes directorios coincidentes, puede desbordar el tamaño de la línea de comando pasada a "rm -Rf". Se supone que el límite proporcionado por el valor predeterminado para "-s" previene que xargs haga eso, todavía lo encuentro en algunas plataformas; ese cheque no parece ser muy confiable en todas partes. Para evitar cualquier problema aquí, siempre uso "-n 1" como un argumento para xargs, por lo que obtengo el beneficio de procesar toda la entrada canalizada, sin preocupaciones de desbordamiento. En ese momento, también podría usar exec porque la ganancia eficiente que buscaba desaparece. –
interesante. no hay forma de que este script pueda rm -rf/porque el -name tiene que ser 'CVS', ¿verdad? Sólo quiero asegurarme, je. –
@meder: Correcto, no puede 'rm -Rf /' debido a '-name'. Por supuesto, puede eliminar felizmente el repositorio de CVS que se encuentra en '/ srv/CVS'. Es posible que desee agregar más pruebas para que sea más seguro. – derobert