2017-07-10 2 views
1

J'ai un script bash qui fonctionne pour créer des sauvegardes et les télécharger en tant qu'archive tar vers un serveur sftp distant. Après le téléchargement, le script doit supprimer tous les 20 fichiers de sauvegarde, à l'exception des 20 derniers. Je ne peux pas en utiliser, pipe, grep, quel que soit le sftp. De plus, le résultat de la liste de fichiers n'est pas traité dans mon bash-script.Supprime tous les fichiers X, sauf les derniers X de sftp via bash-script

export SSHPASS=$(cat /etc/backup/pw) 
SFTPCONNECTION=$(cat /etc/backup/sftp-connection) 

sshpass -e sftp $SFTPCONNECTION - << SOMEDELIMITER 
ls -lt backup-*.tar 
quit 
SOMEDELIMITER 

Il est this nice oneliner, mais je ne figure pas comment l'utiliser dans mon cas (SFTP).

Répondre

0

Merci à codelitt je suis allé avec cette solution:

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" 

Il est une légère modification de sa version:

  • il compte/supprime uniquement les fichiers nommés sauvegarde * .tar
  • il utilise ls -l (pour les listes basées sur les lignes)
  • Je devais utiliser sshpass au lieu d'une base de certificats d authentification. Le mot de passe sftp se trouve dans/etc/backup/pw
1

Ce script supprime tous les fichiers tar dans le répertoire donné sauf les 20 derniers. Le drapeau -t trie par date & date. La redirection <<< étend $RESULT à la boucle stdin de la boucle while. Je ne suis pas entièrement satisfait de cela car il doit créer plusieurs connexions, mais avec sftp je ne crois pas qu'il y ait un autre moyen.

RESULT=`echo "ls -t path/to/old_backups/" | sftp -i ~/.ssh/your_ssh_key [email protected] | 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"