GNU/Linux >> Tutoriales Linux >  >> Linux

¿El comando Rm en Bash Script no funciona con variables?

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

Linux
  1. Bash Echo ¿La línea de comando se ejecutó en la propia línea de comando (no en un script)?

  2. ¿La variable Curl Outfile no funciona en Bash Script?

  3. ¿Por qué no funciona el autocompletado cuando se escribe un nombre de comando después de `fuente`?

  4. Cómo hacer que el comando de alias funcione en script bash o archivo bashrc

  5. nombre base con espacios en un script bash?

¿Por qué `exit &` no funciona?

¿Cómo funciona agregar un Ppa con un comando Curl?

nohup:comando no encontrado

Alias ​​con variable en bash

Ejecute el comando bash en la canalización de jenkins

La coincidencia de patrones no funciona en el script bash