通过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"