通过bash脚本从sftp删除所有最新的X文件
问题描述:
我有一个可用的bash脚本来创建备份并将它们作为tar归档文件上传到远程sftp服务器。通过bash脚本从sftp删除所有最新的X文件
上传后,脚本应该删除除最新的20个备份文件以外的所有文件。我不能使用任何,管道,grep,无论在sftp。此外,我没有得到在我的bash脚本中处理的文件列表结果。
export SSHPASS=$(cat /etc/backup/pw)
SFTPCONNECTION=$(cat /etc/backup/sftp-connection)
sshpass -e sftp $SFTPCONNECTION - << SOMEDELIMITER
ls -lt backup-*.tar
quit
SOMEDELIMITER
有this nice oneliner,但我并没有弄清楚如何在我的情况(SFTP)使用它。
答
感谢codelitt我用这个解决方案去:
export SSHPASS=$(cat /etc/backup/pw)
SFTPCONNECTION="[email protected]"
RESULT=`echo "ls -tl backup*.tar" | sshpass -e sftp $SFTPCONNECTION | grep -oP "backup.*\.tar" `
i=0
max=24
while read -r line; do
# echo "$line "
((i++))
if ((i > max)); then
echo "DELETE $i...$line"
echo "rm $line" | sshpass -e sftp $SFTPCONNECTION
fi
done <<< "$RESULT"
这是他的版本略作修改:
- 它计数/只删除名为备份*的.tar 文件
- 它使用ls -l(用于基于行的列表)
- 我不得不使用sshpass而不是证书库d认证。 sftp密码在/ etc/backup/pw里面
答
该脚本删除给定目录中除最后20个之外的所有tar文件。 -t
标志按日期排序&日期。 <<<
重定向将$RESULT
馈送放入while
循环的stdin
。我不完全满意它,因为它必须创建多个连接,但sftp
我不相信有另一种方式。
RESULT=`echo "ls -t path/to/old_backups/" | sftp -i ~/.ssh/your_ssh_key [email protected]com | grep tar`
i=0
max=20
while read -r line; do
((i++))
if ((i > max)); then
echo "DELETE $i...$line"
echo "rm $line" | sftp -i ~/.ssh/your_ssh_key [email protected]
fi
done <<< "$RESULT"