我有一个工作bash脚本来创建备份并将它们作为tar存档上传到远程sftp服务器。
上传后,脚本应删除除最新的20个备份文件以外的所有文件。我不能在sftp上使用任何,管道,grep等等。另外,我没有在我的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)。
答案 0 :(得分:1)
此脚本将删除给定目录中除最后20个之外的所有tar文件。 -t
标记按时间排序&amp;日期。 <<<
重定向将$RESULT
Feed扩展为stdin
循环的while
。我并不完全满意,因为它必须创建多个连接,但sftp
我不相信有另一种方式。
RESULT=`echo "ls -t path/to/old_backups/" | sftp -i ~/.ssh/your_ssh_key user@server.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 user@server.com
fi
done <<< "$RESULT"
答案 1 :(得分:0)
Thanks to codelitt I went with this solution:
export SSHPASS=$(cat /etc/backup/pw)
SFTPCONNECTION="username@host"
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"
It's a slight modification of his version: