Script rsync et dossier avec espaces

Script rsync et dossier avec espaces - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 12-10-2007 à 01:32:40    

J'ai ecris un script bash qui lit une liste de répertoires et les envoie a un serveur distant par rsync.
Ca marche bien, sauf que si je desire sauvegarder mettont le répertoire : /home/guepe/Rep avec_unespacedanslenom et tout ce qu'il y a dessous (sous rep) ca plante : rsync tente d'envoyer /home/guepe/Rep et ensuite avec_unespacedanslenom
Si un sous repertoire possede un espace, camarche bien apr contre..

 

Mon script est tout petit :

 
Code :
  1. #!/bin/bash
  2. # backup.sh
  3. # basic rsync-based backup script
  4. host_user="root"
  5. host_addr="***********"
  6. host_path="/volume1/public/etienne/backup/"
  7. for i in `cat ~/.backup/listfile`; do
  8. #echo $i
  9.     echo $i > ~/.backup/cur_file
  10. more ~/.backup/cur_file
  11. rsync -e 'ssh' -azv $i $host_user@$host_addr:$host_path$(more ~/.backup/cur_file |cut -d '/' -f $(grep -o "/" ~/.backup/cur_file |wc -l)-)
  12. rm -f ~/.backup/cur_file
  13. done
  14. rm -f ~/.backup/cur_file


Quelle erreur peut bien causer ce probleme ?

Message cité 1 fois
Message édité par guepe le 12-10-2007 à 05:51:38

---------------
Un blog qu'il est bien
Reply

Marsh Posté le 12-10-2007 à 01:32:40   

Reply

Marsh Posté le 12-10-2007 à 03:11:14    

Salut,
 
tu n'a a prioris pas fait d'erreur, mais c'est le comportement par defaut de bash.
 
je te propose cette version qui doit fonctionner :
 

Code :
  1. #!/bin/bash
  2. # backup.sh
  3. # basic rsync-based backup script
  4. IFS=$'\n'
  5. host_user="root"
  6. host_addr="88.167.88.171"
  7. host_path="/volume1/public/etienne/backup/"
  8. for i in `cat ~/.backup/listfile`; do
  9. #echo $i
  10.     echo $i > ~/.backup/cur_file
  11. more ~/.backup/cur_file
  12. rsync -e 'ssh' -azv $i $host_user@$host_addr:$host_path$(more ~/.backup/cur_file |cut -d '/' -f $(grep -o "/" ~/.backup/cur_file |wc -l)-)
  13. rm -f ~/.backup/cur_file
  14. done
  15. rm -f ~/.backup/cur_file


 
 
 
 
 
 
 
Tout est dans la variable IFS qui est un espace par defaut.
 
man bash


Message édité par sputnick le 12-10-2007 à 03:14:31
Reply

Marsh Posté le 12-10-2007 à 08:29:34    

guepe a écrit :

J'ai ecris un script bash qui lit une liste de répertoires et les envoie a un serveur distant par rsync.
Ca marche bien, sauf que si je desire sauvegarder mettont le répertoire : /home/guepe/Rep avec_unespacedanslenom et tout ce qu'il y a dessous (sous rep) ca plante : rsync tente d'envoyer /home/guepe/Rep et ensuite avec_unespacedanslenom
Si un sous repertoire possede un espace, camarche bien apr contre..

 

Mon script est tout petit :

 
Code :
  1. #!/bin/bash
  2. # backup.sh
  3. # basic rsync-based backup script
  4. host_user="root"
  5. host_addr="***********"
  6. host_path="/volume1/public/etienne/backup/"
  7. for i in `cat ~/.backup/listfile`; do
  8. #echo $i
  9.     echo $i > ~/.backup/cur_file
  10. more ~/.backup/cur_file
  11. rsync -e 'ssh' -azv $i $host_user@$host_addr:$host_path$(more ~/.backup/cur_file |cut -d '/' -f $(grep -o "/" ~/.backup/cur_file |wc -l)-)
  12. rm -f ~/.backup/cur_file
  13. done
  14. rm -f ~/.backup/cur_file


Quelle erreur peut bien causer ce probleme ?

 

Oh, c'est très simple en fait: tu dois juste protéger ta variable avec des double quote:

 
Code :
  1. #!/bin/bash
  2. # backup.sh
  3. # basic rsync-based backup script
  4. host_user="root"
  5. host_addr="***********"
  6. host_path="/volume1/public/etienne/backup/"
  7. for BACKUP in `cat ~/.backup/listfile`; do
  8. #echo "${BACKUP}"
  9.     echo "${BACKUP}" > ~/.backup/cur_file
  10. more ~/.backup/cur_file
  11. rsync -e 'ssh' -azv "${BACKUP}" $host_user@$host_addr:$host_path$(more ~/.backup/cur_file |cut -d '/' -f $(grep -o "/" ~/.backup/cur_file |wc -l)-)
  12. rm -f ~/.backup/cur_file
  13. done
  14. rm -f ~/.backup/cur_file
 

J'ai changé le nom de ta variable pour un truc plus causant.
Avec cette protection, ton backup devrait se passer comme un charme. :)


Message édité par Fork Bomb le 12-10-2007 à 09:47:44

---------------
Décentralisons Internet-Bépo-Troll Bingo - "Pour adoucir le mélange, pressez trois quartiers d’orange !"
Reply

Marsh Posté le 12-10-2007 à 16:01:49    

berk berk berk
 
t'as des option include/exclude pour donner la liste des fichiers à backuper

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed