GNU/Linux >> Tutoriels Linux >  >> Linux

La commande Rm dans le script Bash ne fonctionne pas avec la variable ?

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

Linux
  1. Pourquoi la substitution de processus Bash ne fonctionne-t-elle pas avec certaines commandes ?

  2. Mapper les métadonnées avec Avconv ne fonctionne pas ?

  3. La variable Curl Outfile ne fonctionne pas dans le script Bash ?

  4. Dans un script bash, comment la commande Continuer fonctionne-t-elle avec les boucles intégrées ?

  5. Pourquoi `exit &` ne fonctionne pas ?

nom de base avec des espaces dans un script bash ?

Le script bash imprime la commande introuvable sur des lignes vides

Pourquoi Tomcat fonctionne-t-il avec le port 8080 mais pas 80 ?

bash sh - commande introuvable

Exécutez la commande bash sur le pipeline jenkins

La correspondance de modèle ne fonctionne pas dans le script bash