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 rm
recibe una lista de todos los archivos y directorios encontrados desde el find
comando. Y directorios de directorios en la lista ubicada frente a ellos y archivos eliminados de forma recursiva.
Puedo ofrecer dos soluciones:
- Clasificarrecursivo
find
resultados:find $PWD -maxdepth 5 -mtime +80 | sort -r | xargs -I{} rm -Rvf {}
- Utilice
-delete
la opción en lugar de la herramienta externarm
.find $PWD -maxdepth 5 -mtime +80 -delete
UPD.1 Como sugiere@Dimitarpuede agregar -type d
y luego buscar funcionará solo con directorios. Puede que sea más rápido, pero en este caso no limpia los archivos antiguos del $PWD
directorio.
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.