Je fais un script bash pour créer une sauvegarde de mes bases de données mysql.
En fait, je voudrais supprimer les anciennes.
Donc, je crée mon script avec une variable pour la maintabilité.
L'ensemble du script fonctionne réellement, la seule chose qui ne fonctionne pas, c'est la suppression des anciens. Je pensais que ce serait la partie la plus facile.
Bref, voici mon code, quelqu'un peut-il me dire ce qui ne va pas ?
Et la commande rm me renvoie :rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type
Ce qui signifie rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type
Mais ce qui est vraiment étrange, c'est d'abord que j'ai trouvé le script dans un tutoriel
Deux, que si je lance moi-même le "rm /path/to/backup/files/*.gz" dans une commande shell, cela fonctionne et supprime tous les fichiers .gz (comme prévu)
#!/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
Merci,
Réponse acceptée :
Une autre méthode consiste à combiner rm avec find et/ou xargs .
Voici quelques alternatives :
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
PS :taper f signifie rechercher des fichiers.
Par défaut, find recherche tous les sous-répertoires. Vous pouvez limiter l'opération de recherche au répertoire actuel si nécessaire en utilisant l'option maxdepth :
find "$output" -maxdepth 1 -name "*.gz" -type f -exec rm '{}' \;
Si vous devez continuer à travailler avec rm et une variable, cela a fonctionné pour moi en une seule ligne :
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