Necesito enumerar y eliminar archivos .php, .xml. Para esto estoy usando find
el comando.
Listar :
find . -type f -name \*.php -print0
Borrar :
find . -type f -name \*.php -print0 | xargs -0 rm -r
Mientras corro find
dos veces. ¿Es posible almacenar el resultado del primer comando y luego reutilizarlo en el segundo?
Gracias.
Respuesta1
find . -type f -name '*.php' -print0 | tee list | tr \\0 \\n
xargs -r0 rm -f < list
Eso supone que desea ver la lista antes de decidir eliminarlos. Si no, simplemente puedes hacer:
find . -name '*.php' -type f -print -delete
(tenga en cuenta que -print0
, -delete
, -r
, -0
no son estándar pero son compatibles con la implementación GNU)
También tenga en cuenta que, si bien find -delete
es relativamente seguro, en la primera solución, alguien podría cambiar el nombre de los directorios a enlaces simbólicos a algunas áreas sensibles entre el momento en que ejecuta el comando find
and xargs
y obligarlo a eliminar archivos que no tenía intención de hacerlo. Correr find
dos veces, la segunda vez -delete
evitaría eso.
Respuesta2
Dado que necesita .php
archivos .xml
, el find
comando debería verse así:
find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +
Las +
instrucciones find
para usar rm
solo una vez por fragmento de archivos. Si hubiéramos usado, \;
habríamos ejecutado un rm
comando para cada archivo.