GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rm-Befehl im Bash-Skript funktioniert nicht mit Variablen?

Ich mache ein Bash-Skript, um ein Backup meiner MySQL-Datenbanken zu erstellen.
Eigentlich würde ich gerne die alten löschen.

Also erstelle ich mein Skript mit Variablen für die Wartbarkeit.

Das ganze Skript funktioniert tatsächlich, das einzige was nicht funktioniert ist das löschen der alten. Ich dachte, das wäre der einfachste Teil.

Wie dem auch sei, hier ist mein Code, kann mir jemand sagen, was falsch ist?
Und der Befehl rm gibt mir Folgendes zurück:rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type Was bedeutet rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type

Aber was wirklich seltsam ist, ist zunächst, dass ich das Skript in einem Tutorial gefunden habe

Zweitens, wenn ich selbst „rm /path/to/backup/files/*.gz“ in einem Shell-Befehl starte, funktioniert dies und löscht alle .gz-Dateien (wie erwartet)

#!/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

Danke,

Akzeptierte Antwort:

Eine alternative Möglichkeit besteht darin, rm mit find und/oder xargs zu kombinieren.
Dies sind einige Alternativen:

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:Geben Sie f ein, um nach Dateien zu suchen.

Standardmäßig durchsucht find alle Unterverzeichnisse. Sie können den Suchvorgang bei Bedarf auf das aktuelle Verzeichnis beschränken, indem Sie die Option maxdepth verwenden:

find "$output" -maxdepth 1 -name "*.gz" -type f -exec rm '{}' \;

Wenn Sie weiterhin mit rm und einer Variablen arbeiten müssen, hat dies für mich in einer Zeile funktioniert:

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-Skript mit `set -e` stoppt nicht beim Befehl `… &&…`?

  2. Mapping von Metadaten mit Avconv funktioniert nicht?

  3. Bash Echo Die Befehlszeile wird in der Befehlszeile selbst ausgeführt (nicht in einem Skript)?

  4. Wie funktioniert der Continue-Befehl in einem Bash-Skript mit eingebetteten Schleifen?

  5. Warum funktioniert `exit &` nicht?

Curl-Outfile-Variable funktioniert nicht in Bash-Skript?

Warum funktioniert die automatische Vervollständigung nicht, wenn ein Befehlsname nach „Quelle“ eingegeben wird?

Alias ​​mit Variable in Bash

Das Bash-Skript gibt „Command Not Found“ in leeren Zeilen aus

Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Der Musterabgleich funktioniert nicht im Bash-Skript