使用来自“查找”命令的参数进行卷曲请求

时间:2019-12-18 15:15:14

标签: linux bash curl

我有制作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/'{} \;

感谢支持。

2 个答案:

答案 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/循环删除了过期的文件