GNU/Linux >> Znalost Linux >  >> Linux

Příkaz Rm ve skriptu Bash nefunguje s proměnnou?

Dělám bash skript pro vytvoření zálohy mých mysql databází.
Ve skutečnosti bych chtěl ty staré smazat.

Takže jsem vytvořil svůj skript s proměnnou pro údržbu.

Celý skript vlastně funguje, jediná věc, která nefunguje, je smazání starých. Myslel jsem, že to bude ta nejjednodušší část.

Každopádně zde je můj kód, může mi někdo říct, co je špatně?
A příkaz rm mi vrátí:rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type Což znamená rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type

Ale co je opravdu zvláštní, zaprvé je, že jsem skript našel v tutoriálu

Za druhé, že když si v příkazu shell spustím „rm /path/to/backup/files/*.gz“, bude to fungovat a odstraní všechny soubory .gz (podle očekávání)

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

Děkuji,

Přijatá odpověď:

Alternativním způsobem je zkombinovat rm s find a/nebo xargs .
Zde jsou některé alternativy:

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:typ f znamená vyhledání souborů.

Ve výchozím nastavení hledání prohledává všechny podadresáře. V případě potřeby můžete operaci hledání omezit na aktuální adresář pomocí volby maxdepth:

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

Pokud potřebujete nadále pracovat s rm a proměnnou, fungovalo to pro mě na jednom řádku:

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. Proměnná Curl Outfile nefunguje ve skriptu Bash?

  2. Ve skriptu Bash Jak funguje příkaz Continue s vestavěnými smyčkami?

  3. Proč nefunguje automatické dokončování při zadávání názvu příkazu za „zdroj“?

  1. Proč „ukončit &“ nefunguje?

  2. Alias ​​s proměnnou v bash

  3. základní jméno s mezerami ve skriptu bash?

  1. Skript Bash vypíše příkaz Nenalezen na prázdné řádky

  2. Proč Tomcat pracuje s portem 8080, ale ne s 80?

  3. bash sh - příkaz nenalezen