GNU/Linux >> Belajar Linux >  >> Linux

Perintah Rm Dalam Skrip Bash Tidak Bekerja Dengan Variabel?

Saya sedang membuat skrip bash untuk membuat cadangan database mysql saya.
Sebenarnya, saya ingin menghapus yang lama.

Jadi, saya membuat skrip saya dengan variabel untuk pemeliharaan.

Seluruh skrip sebenarnya berfungsi, satu-satunya yang tidak berfungsi, adalah penghapusan yang lama. Saya pikir itu akan menjadi bagian yang paling mudah.

Bagaimanapun, ini kode saya, dapatkah seseorang memberi tahu saya apa yang salah?
Dan perintah rm mengembalikan saya :rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type Artinya rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type

Tapi anehnya yang pertama saya temukan scriptnya di tutorial

Kedua, bahwa jika saya meluncurkan sendiri "rm /path/to/backup/files/*.gz" dalam perintah shell, ini berfungsi dan menghapus semua file .gz (seperti yang diharapkan)

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

Terima kasih,

Jawaban yang Diterima:

Cara alternatif adalah dengan menggabungkan rm dengan find dan/atau xargs .
Ini adalah beberapa alternatif:

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:ketik f berarti mencari file.

Secara default find mencari semua subdir. Anda dapat membatasi operasi find ke direktori saat ini jika diperlukan dengan menggunakan opsi maxdepth:

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

Jika Anda perlu tetap bekerja dengan rm dan variabel, ini bekerja untuk saya dalam satu baris:

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. Mengapa Substitusi Proses Bash Tidak Bekerja Dengan Beberapa Perintah?

  2. Bash Echo Baris Perintah Dieksekusi Di Baris Perintah Itu Sendiri (bukan Dalam Script)?

  3. Variabel Curl Outfile Tidak Bekerja Dalam Skrip Bash?

  1. Dalam Skrip Bash Bagaimana Perintah Lanjutkan Bekerja Dengan Loop Tertanam?

  2. Mengapa Pelengkapan Otomatis Tidak Berfungsi Saat Mengetik Nama Perintah Setelah `sumber`?

  3. Mengapa `keluar &` Tidak Berfungsi?

  1. Cara membuat perintah alias berfungsi di skrip bash atau file bashrc

  2. Alias ​​​​dengan variabel di bash

  3. bash sh - perintah tidak ditemukan