
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_PATH
contiene la ruta correcta. La carpeta creada tiene este nombre: server.log.backups
(Observe el punto entre log
y 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_PATH
sustituido.
Lo que probablemente quieras es:
rm -rf "$MINECRAFT_PATH/server.log backups/"*
Esto eliminará el contenido de la server.log backups
carpeta.
Algunas alternativas:
Podrías programar tu script de manera más defensiva, eliminando así la
-f
opción pararm
. En ese caso, fallaría si laserver.log backups
carpeta estuviera vacía, porque el globo no se expandiría ni se transmitiría literalmente, y no habría ningún archivo llamadoserver.log backups/*
.Podrías simplemente
rm -rf
toda la carpeta ymkdir -p
luego.O bien, también puede simplemente realizar una eliminación profunda de todos los archivos y carpetas dentro de la
server.log backups
carpeta.-mindepth 1
evita que el padre sea eliminado:find "$MINECRAFT_PATH/server.log backups" -mindepth 1 -depth -delete