GNU/Linux >> Linux の 問題 >  >> Linux

BashスクリプトのRmコマンドは変数では機能しませんか?

mysqlデータベースのバックアップを作成するためにbashスクリプトを実行しています。
実際、古いデータベースを削除したいと思います。

そこで、保守性のために変数を使用してスクリプトを作成します。

スクリプト全体が実際に機能していますが、機能しないのは古いものを削除することだけです。一番簡単な部分だと思っていました。

とにかく、ここに私のコードがあります、誰かが私に何が悪いのか教えてもらえますか?
そしてrmコマンドは私を返します:rm: impossible de supprimer « /path/to/backup/files/*.gz »: Aucun fichier ou dossier de ce type つまり、rm: impossible to delete « /path/to/backup/files/*.gz »: no files or directory of this type

しかし、本当に奇妙なのは、最初に、チュートリアルでスクリプトを見つけたことです

2つ目は、シェルコマンドで「rm / path / to / backup / files / *。gz」を起動すると、これが機能し、すべての.gzファイルが削除されることです(予想どおり)

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

ありがとう、

承認された回答:

別の方法は、rmをfindやxargsと組み合わせることです。
これらはいくつかの方法です:

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:タイプfは、ファイルを検索することを意味します。

デフォルトでは、findはすべてのサブディレクトリを検索します。 maxdepthオプションを使用して、必要に応じて検索操作を現在のディレクトリに制限できます。

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

rmと変数を使い続ける必要がある場合、これは1行でうまくいきました:

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. Avconvを使用したメタデータのマッピングが機能しませんか?

  2. Bash Echoコマンドライン自体で実行されるコマンドライン(スクリプトではない)?

  3. なぜ`exit&`が機能しないのですか?

  1. エイリアス コマンドを bash スクリプトまたは .bashrc ファイルで機能させる方法

  2. bashスクリプトにスペースを含むベース名?

  3. パターン マッチが bash スクリプトで機能しない

  1. `set -e`を使用したBashスクリプトは`…&&…`コマンドで停止しませんか?

  2. 一部のコマンドでBashプロセス置換が機能しないのはなぜですか?

  3. Curl Outfile変数がBashスクリプトで機能しませんか?