Manera optimizada de enumerar y eliminar archivos

Manera optimizada de enumerar y eliminar archivos

Necesito enumerar y eliminar archivos .php, .xml. Para esto estoy usando findel comando.

Listar : find . -type f -name \*.php -print0

Borrar : find . -type f -name \*.php -print0 | xargs -0 rm -r

Mientras corro finddos 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, -0no son estándar pero son compatibles con la implementación GNU)

También tenga en cuenta que, si bien find -deletees 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 findand xargsy obligarlo a eliminar archivos que no tenía intención de hacerlo. Correr finddos veces, la segunda vez -deleteevitaría eso.

Respuesta2

Dado que necesita .phparchivos .xml, el findcomando debería verse así:

find . \( -name '*.php' -o -name '*.xml' \) -type f -print -exec rm {} +

Las +instrucciones findpara usar rmsolo una vez por fragmento de archivos. Si hubiéramos usado, \;habríamos ejecutado un rmcomando para cada archivo.

información relacionada