El comando Find y rm no se elimina de forma recursiva

El comando Find y rm no se elimina de forma recursiva

Tenemos scripts simples que suponen eliminar carpetas antiguas. El problema es que no los elimina de forma recursiva.

Este es el comando:

find $PWD -maxdepth 5 -mtime +80 | xargs -I{} rm -Rvf {}

Elimina los archivos y carpetas pero de repente intenta eliminar un archivo de un directorio que ya eliminó.

El servidor está funcionandoCentOS, y las carpetas se montan usandoNFSdel almacenamiento.

¿Qué podemos hacer?

Respuesta1

Esto sucede porque rmrecibe una lista de todos los archivos y directorios encontrados desde el findcomando. Y directorios de directorios en la lista ubicada frente a ellos y archivos eliminados de forma recursiva.

Puedo ofrecer dos soluciones:

  1. Clasificarrecursivo findresultados:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
  2. Utilice -deletela opción en lugar de la herramienta externa rm.find $PWD -maxdepth 5 -mtime +80 -delete

UPD.1 Como sugiere@Dimitarpuede agregar -type dy luego buscar funcionará solo con directorios. Puede que sea más rápido, pero en este caso no limpia los archivos antiguos del $PWDdirectorio.

find $PWD -maxdepth 5 -mtime +80 -type d | xargs -I{} rm -Rvf {}

UPD.2Como sugiere@ezra-spuedes hacerlo sin xargs:

find $PWD -maxdepth 5 -mtime +80 -exec rm -Rvf {} \;

Y creo que esta es realmente la mejor manera.

información relacionada