rm -rf no elimina el contenido de la carpeta sino que crea otra vacía

rm -rf no elimina el contenido de la carpeta sino que crea otra vacía

Actualmente estoy escribiendo un script de inicio para un servidor de juegos de Minecraft. En este script incluí un script de respaldo.

Este script de copia de seguridad funciona casi a la perfección, pero en lugar de eliminar el contenido de una carpeta, simplemente crea otra (con un nombre similar) y no hace nada con la carpeta de destino.

Estoy usando este comando: rm -rf "$MINECRAFT_PATH/server.log backups/*"
este comando se ejecuta en un script bash.

La variable $MINECRAFT_PATHcontiene la ruta correcta. La carpeta creada tiene este nombre: server.log.backups(Observe el punto entre logy backups). Pero la carpeta de destino tiene este nombre: server.log backups. Esta carpeta existe y este no es el problema.

Respuesta1

Las comillas dobles en Bash conservan la mayoría de los valores literales del contenido, por lo que su *globo se pasa literalmente a rm, que intentará eliminar un archivo o carpeta llamado *. Sin embargo, está $MINECRAFT_PATHsustituido.

Lo que probablemente quieras es:

rm -rf "$MINECRAFT_PATH/server.log backups/"*

Esto eliminará el contenido de la server.log backupscarpeta.

Algunas alternativas:

  • Podrías programar tu script de manera más defensiva, eliminando así la -fopción para rm. En ese caso, fallaría si la server.log backupscarpeta estuviera vacía, porque el globo no se expandiría ni se transmitiría literalmente, y no habría ningún archivo llamado server.log backups/*.

  • Podrías simplemente rm -rftoda la carpeta y mkdir -pluego.

  • O bien, también puede simplemente realizar una eliminación profunda de todos los archivos y carpetas dentro de la server.log backupscarpeta. -mindepth 1evita que el padre sea eliminado:

    find "$MINECRAFT_PATH/server.log backups" -mindepth 1 -depth -delete
    

información relacionada