Comando que elimina todos los archivos, carpetas y subcarpetas antiguos

Comando que elimina todos los archivos, carpetas y subcarpetas antiguos

Necesito un comando que elimine todos los archivos, carpetas y subcarpetas que no se actualizaron durante más de 31 días. Probé este

find . -mindepth 1 -mtime +31 -exec rm -rf "{}" \;

Pero si tengo una jerarquía como esta

.
├── old_sub_folder1
└── old_sub_folder2
    ├── old_file
    └── old_sub_folder3
        └── new_file

¿Dónde old_*están las carpetas\archivos antiguos y new_filees un archivo nuevo?

Este comando eliminará todo el contenido. Porque old_sub_folder2la fecha no se actualizó después de new_filesu creación.

Necesito un comando que no elimine old_sub_folder2/old_sub_folder3/new_file

Respuesta1

El problema es que agregaste la -ropción a tu rmcomando. Esto eliminará las carpetas incluso si no están vacías.

Debes hacer esto en dos pasos:

  1. Eliminar solo elarchivos antiguos:

    find . -type f -mtime +31 -delete

  2. Para eliminar carpetas antiguas, si están vacías, podemos echar un vistazoaquíy modifíquelo un poco:

    find . -type d -empty -mtime +31 -delete

Respuesta2

find  . -type d ! -name . -mtime +31 -exec sh -c '
   case $(find "$1" ! -mtime +31 -exec echo x \; -prune) in
      "" ) rm -rf "$1" || echo "Error could not delete folder \"$1\"" ;;
   esac
' {} {} \;

Desde el directorio actual lo lanzamos findy miramos solo directorieslos que no se han actualizado desde los últimos 31 días. Y en cada uno de estos directorios, a su vez, nos sumergimos y buscamos cualquier cosa que no tenga más de 31 días, y al encontrarlo hacemos eco de un carácter ficticio y también eliminamos cualquier búsqueda hacia adelante (idealmente deberíamos terminar nuestra búsqueda aquí por medio de -quitpero no es POSIXpor eso que nos conformamos -prune).

Luego buscamos el resultado de esta findoperación y si resulta estar vacío sabemos que ni siquiera un elemento (archivo/dir/enlace/etc.) era nuevo y por lo tanto este directorio. es seguro para su eliminación.

información relacionada