problème avec les wilcard (*) et sudo+rsync

problème avec les wilcard (*) et sudo+rsync - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 16-08-2005 à 16:17:39    

salut à tous,
 
j'ai une fois de plus un problème tout con mais chiant.
J'utilise sudo+rsync pour synchroniser 2 machines (depuis apache).
 
voilà la commande que j'utilise :
 
cd /var/www/mondossier; sudo -u monuser rsync -u -e ssh * xxx.xxx.xxx.xxx:/var/www/mondossierdistant
 
 
 
Mon problème c'est que tout fonctionne bien tant que la liste des fichiers à synchroniser ne dépasse pas la longueur maxi des arguments de rsync, mais dès que c'est le cas j'ai une erreur "Argument list too long" car sudo interprete la wilcard "*" et passe le résultat à rsync, donc au lieu d'avoir une commande rsync du type :
rsync -u -e ssh * xxx.xxx.xxx.xxx:/var/www/mondossierdistant
j'ai :
rsync -u -e ssh fichier1 fichier2 fichiern xxx.xxx.xxx.xxx:/var/www/mondossierdistant
 
et ça dépasse la capacité de rsync.
 
 
Précisions :
- la commande marche sur d'autres dossiers plus petits
- la commande rsync marche sans le sudo
- je ne veux synchroniser que les fichiers et pas les sous dossiers, c'est pour cela que j'utilise "*" au lieu "./" couplé au flag -r.
 
 
Comment faire?

Reply

Marsh Posté le 16-08-2005 à 16:17:39   

Reply

Marsh Posté le 19-08-2005 à 16:01:24    

snif

Reply

Marsh Posté le 19-08-2005 à 16:27:14    

Tu peux esayer un truc du style
 

Code :
  1. for i in *; do
  2. if [ ! -d $i ]; then
  3.   rsync -u -e ssh $i xxx.xxx.xxx.xxx:/var/www/mondossierdistant
  4. fi
  5. done


 
Edit : j'ai peut etre pas compris ton probleme


Message édité par BiBi Max le 19-08-2005 à 16:27:39

---------------
BiBi Max
Reply

Marsh Posté le 19-08-2005 à 16:29:32    

ouaip, mais là ça me fait appeller rsync et ouvrir une session ssh pour chaque fichier, pas classe...

Reply

Marsh Posté le 19-08-2005 à 16:37:56    

c'est pas faux...
tu as combien de fichiers dans ton rep ?


---------------
BiBi Max
Reply

Marsh Posté le 19-08-2005 à 16:39:30    

quelques centaines.
 
Je ne pense pas que tu ai compris le blème, malheureusement je ne sais pas comment l'expliquer mieux

Reply

Marsh Posté le 19-08-2005 à 16:41:30    

On va essaye de faire mieux  :)  

Code :
  1. find . -type f -name '*' -exec  rsync -u -e ssh {} xxx.xxx.xxx.xxx:/var/www/mondossierdistant \;


Message édité par BiBi Max le 19-08-2005 à 16:41:55

---------------
BiBi Max
Reply

Marsh Posté le 19-08-2005 à 16:43:35    

duch a écrit :

quelques centaines.
 
Je ne pense pas que tu ai compris le blème, malheureusement je ne sais pas comment l'expliquer mieux


J'ai compris que tu as tellement de fichiers que le shell "expand" tous ces fichiers en arguments et au final, ta commande a trop d'arguments.


---------------
BiBi Max
Reply

Marsh Posté le 19-08-2005 à 16:46:01    

alors au choix :
 
tu casses en quelques morceaux :

rsync -u -e ssh [a-l]* xxx.xxx.xxx.xxx:/var/www/mondossierdistant
rsync -u -e ssh [m-z]* xxx.xxx.xxx.xxx:/var/www/mondossierdistant


PB : totalement bricolage
 
 
 
 
tu bricoles avec find :

find $directory -type f -name '*' -exec blabla {} \;


PB : c'est long
 
 
 
 
 
tu te fais une fonction qui tue :

function kitue () {        
    while read line1; do {
        blabla
    }
    done
}
ls -1 directory/ | kitue


PB : euh chai po faut tester... a priori aussi long que find, voire plus vu que find doit être optimisé
 
 
 
 
 
tu recompiles le noyau en changeant  

#define MAX_ARG_PAGES


PB : c'est ptet un peu trop extreme l33t :D


Message édité par Xavier_OM le 19-08-2005 à 16:46:35

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 19-08-2005 à 16:49:20    

Bon, avec tout ca, tu vas y arriver ;-)


---------------
BiBi Max
Reply

Marsh Posté le 19-08-2005 à 16:49:20   

Reply

Marsh Posté le 19-08-2005 à 16:50:17    

quelle brute.
 
j'ai trouvé une méthode moins brutale, bien que moins joli.
 
je vais faire mon rsync en récursif sur le dossier et exclure explicitement les sous-dossiers par leur nom, c'estpossible car la structure des dossiers est assez figée, mais j'avais pas trop envie de faire ça car le jour où il y'aura un nouveau sous-dossier il faudra que je pense à l'exclure aussi.
 
 
merci pour vos bonnes idées qd même ;-)

Reply

Marsh Posté le 20-08-2005 à 16:37:11    

cd /var/www/mondossier; sudo -u monuser rsync -u -e ssh * xxx.xxx.xxx.xxx:/var/www/mondossierdistant  
 
ne serait-il pas équivalent à  
 
sudo -u $monuser rsync -u -e ssh /var/www/mondossier $IP:/var/www/mondossierdistant

Reply

Marsh Posté le 20-08-2005 à 16:40:08    

Et accessoirement tu échanges les clés entre tes deux machines pour qu'il te casse pas la tête à demander le mdp.

Reply

Marsh Posté le 22-08-2005 à 17:40:29    

chaica > j'ai déjà échangé les clés pas besoin de mot passe

Reply

Sujets relatifs:

Leave a Replay

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