Sto eseguendo uno script bash per creare un backup dei miei database mysql.
In realtà, vorrei eliminare quelli vecchi.
Quindi, creo il mio script con la variabile per la manutenibilità.
L'intero script funziona effettivamente, l'unica cosa che non funziona è l'eliminazione di quelli vecchi. Stavo pensando che sarebbe stata la parte più semplice.
Comunque, ecco il mio codice, qualcuno può dirmi cosa c'è che non va ?
E il comando rm mi restituisce:rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type
Il che significa rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type
Ma la cosa veramente strana, prima di tutto, è che ho trovato lo script in un tutorial
Due, che se lancio io stesso "rm /path/to/backup/files/*.gz" in un comando della shell, funziona ed elimina tutti i file .gz (come previsto)
#!/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
Grazie,
Risposta accettata:
Un modo alternativo è combinare rm con find e/o xargs .
Queste sono alcune alternative:
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:digitare f significa trovare i file.
Per impostazione predefinita trova cerca tutte le sottodirectory. È possibile limitare l'operazione di ricerca alla directory corrente, se necessario, utilizzando l'opzione maxdepth:
find "$output" -maxdepth 1 -name "*.gz" -type f -exec rm '{}' \;
Se hai bisogno di continuare a lavorare con rm e una variabile, questo ha funzionato per me in una riga:
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