我有制作pg_dumpall并上传到我的FTP服务器的bash脚本。
#/bin/bash
timeslot=`date +\%Y-\%m-\%d-\%H:\%M:\%S`
backup_dir="/var/lib/backup"
name=recycle_backup_$timeslot.sql.gz
set -e
find /var/lib/backup/*.sql.gz -mtime +7 -type f -exec rm -rvf {} \; -exec curl -p --insecure ftp://aaa.bbb/backup/{} --user user:password -Q 'DELE backup/'{} \;
echo $timeslot "Running docker container to backup Postgresql"
sudo docker run --rm \
-t \
--name postgres-backup \
-v "/var/lib/backup":"/mnt" \
-w "/mnt" \
-e PGPASSWORD="password" \
--entrypoint=/usr/bin/pg_dumpall \
postgres:9 \
-h 1.2.3.4 -U postgres | gzip -9 > $backup_dir/$name
echo "Your back is successfully stored in " $backup_dir
curl -T /var/lib/backup/$name ftp://aaa.bbb/backup/ --user user:password
它将清除所有旧的.sql.gz文件(超过7天)。
完成这些步骤后,脚本将使用Postgres创建一个docker容器,运行命令进行备份并将其本地保存到 /var/lib/backup/filename.sql.gz 。
问题是我无法使用返回“ 查找”的参数来清理FTP服务器上的文件。
find /var/lib/backup/*.sql.gz -mtime +7 -type f -exec rm -rvf {} \; -exec curl -p --insecure ftp://aaa.bbb/backup/{} --user user:password -Q 'DELE backup/'{} \;
如何将find命令中的参数{}添加到该curl请求中? -Q 'DELE BACKUP/'{} \;
感谢支持。
答案 0 :(得分:0)
这行不通,您只能将{}
与find一起使用。
也许尝试这种方法?如果看起来不错,请删除echo
...
find /var/lib/backup/*.sql.gz -mtime +7 -type f -exec rm -rvf {} + | awk '{print gensub( /...(.*)/, "\\1","1",$2)}' | while read -s file
do
echo curl -p --insecure ftp://aaa.bbb/backup/{} --user user:password -Q 'DELE backup/'${file}
done
答案 1 :(得分:0)
使用第二个脚本解决了该问题,该脚本连接到FTP服务器并从主题https://docs.particular.net/samples/sqltransport-sqlpersistence/循环删除了过期的文件