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