Estoy haciendo un script bash para crear una copia de seguridad de mis bases de datos mysql.
En realidad, me gustaría eliminar las antiguas.
Entonces, creo mi secuencia de comandos con variable para mantenerla.
Todo el script está funcionando, lo único que no funciona es la eliminación de los antiguos. Estaba pensando que sería la parte más fácil.
De todos modos, aquí está mi código, ¿alguien puede decirme qué está mal?
Y el comando rm me devuelve:rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type
Lo que significa rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type
Pero lo realmente extraño, primero es que encontré el script en un tutorial
Dos, que si ejecuto "rm /ruta/a/respaldo/archivos/*.gz" en un comando de shell, esto funciona y elimina todos los archivos .gz (como se esperaba)
#!/bin/bash
USER="***"
PASSWORD="****"
OUTPUT="/path/to/backup/files"
rm "$OUTPUT/*.gz"
databases=`mysql --user=$USER --password=$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] && [[ "$db" != "performance_schema" ]] ; then
echo "Dumping database: $db"
mysqldump --force --opt --user=$USER --password=$PASSWORD --databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
gzip $OUTPUT/`date +%Y%m%d`.$db.sql
fi
done
Gracias,
Respuesta aceptada:
Una forma alternativa es combinar rm con find y/o xargs .
Estas son algunas alternativas:
find "$output" -name *.gz -type f -delete
find "$output" -name "*.gz" -type f -exec rm '{}' \;
find "$output" -name *.gz -type f -print0 | xargs -0 rm
PD:escriba f significa buscar archivos.
Por defecto, find busca en todos los subdirectorios. Puede limitar la operación de búsqueda al directorio actual si es necesario mediante la opción de profundidad máxima:
find "$output" -maxdepth 1 -name "*.gz" -type f -exec rm '{}' \;
Si necesita seguir trabajando con rm y una variable, esto funcionó para mí en una línea:
out="/home/gv/Desktop/PythonTests/appsfiles";rm "$out"/*.txt
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/a.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/a ver 1.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/b.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/c.txt'? y
rm: remove regular file '/home/gv/Desktop/PythonTests/appsfiles/d.txt'? y