GNU/Linux >> Linux Esercitazione >  >> Linux

Il comando Rm nello script Bash non funziona con la variabile?

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

Linux
  1. Lo script Bash con `set -e` non si ferma al comando `… &&…`?

  2. Perché la sostituzione del processo Bash non funziona con alcuni comandi?

  3. Bash Echo La riga di comando eseguita sulla riga di comando stessa (non in uno script)?

  4. Perché `esce &` non funziona?

  5. nohup:comando non trovato

Perché il completamento automatico non funziona quando si digita un nome di comando dopo "source"?

Come funziona l'aggiunta di un Ppa con un comando Curl?

Come far funzionare il comando alias nello script bash o nel file bashrc

basename con spazi in uno script bash?

Lo script Bash stampa Command Not Found su righe vuote

La corrispondenza del modello non funziona nello script bash