linux - 通过 bash 脚本从 sftp 中删除除最新的 X 文件之外的所有文件

标签 linux bash sftp

我有一个可用的 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)。

最佳答案

此脚本删除给定目录中除最后 20 个之外的所有 tar 文件。 -t标志按时间和日期排序。 <<<重定向扩展 $RESULT将其输入 stdinwhile环形。我对它不是很满意,因为它必须创建多个连接,但是 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"

关于linux - 通过 bash 脚本从 sftp 中删除除最新的 X 文件之外的所有文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45014243/

相关文章:

linux - SFTP 适用于 bash 但不适用于 nologin

无法获取客户端通过 TCP 发送的消息

python - python 2.7中的HTTPS请求

linux - 脚本运行时清除bash内容(不是历史记录)

linux - 如何解压缩我的子目录中的所有 zip 文件夹?

regex - 如何在 Linux 中将正则表达式传递给 find 命令?

linux - 如何复制 Linux 设备文件?

linux - 在脚本中关闭 echo

C# 更新密码 Renci.SshNet

java - 无法连续读取/监视远程文件