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