2017-07-10 39 views
1

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

回答

0

感謝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裏面
1

該腳本刪除給定目錄中除最後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" 
相關問題