On Sat, 14 Dec 2002 13:21:13 -0400
Christophe PEREZ <[EMAIL PROTECTED]> wrote:
> Bonjour,
>
> Je suis persuad� que l'un de vous a d�j� planch� sur le probl�me (Jipe?
> :-) ).
>
> Je voudrais synchoniser 2 r�pertoires, en r�cup�rant dans le second, les
> fichiers plus r�cents du premier.
> A savoir que tous les fichiers n'existent pas dans chacun des
> r�pertoires, et surtout, que dans l'un d'entre eux les noms sont en
> majuscule et dans l'autre en minuscules.
> Il faut aussi que la recherche soit r�cursive dans les sous-r�pertoires.
>
> J'ai commenc� � essayer de le faire, avec un for fichier in `ls $1`; do
> puis fichier=$(echo $fichier| tr '[:lower:]' '[:upper:]')
> Mais en fait, ce n'est pas r�cursif, et j'ai un pb avec les fichiers qui
> n'existent que d'un c�t�, et enfin, je n'ai pas beaucoup de temps � y
> consacrer et c'est relativement urgent (professionnel).
>
> Alors, si quelqu'un a d�j� �a tout pr�t, �a me rendra un fier service.
>
> Merci d'avance.
> --
> Christophe PEREZ
>
>
salut christophe,
je t'envoie un petit script de test dont tu pourras t'inspirer s'il te conviens. comme
je ne sais pas exactement ce que tu veux, je ne peux pas te faire du "sur mesure" ;)
#!/bin/bash
#juste au cas o� tu ais des noms de fichier avec espace
IFS=$(echo -e "\n\r\t")
#definition du r�pertoire de synchronisation
SYNCDIR=/home/jipe/tmptest/
#recherche de tous les fichiers r�guliers dans le r�pertoire courrant et
#sous r�pertoires
#si tu veux un autre type de recherche modifie -type f
for name in $(find . -type f)
do
#le nom du fichier dans $SYNCDIR
#l� je suppose que les fichiers sont tous dans le m�me
#r�pertoire
#si tu as recr�� la m�me arborescence modifie
#${name##*/} en ${name#*/}
#${name##*/} est �quivalent � basename
#${name#*/} ne supprime que le ./ que find ajoute en
#t�te de fichier
#les minuscules sont chang�es en majuscules
NAME=$SYNCDIR$(echo ${name##*/} | tr a-z A-Z)
IFS=" "
#$array est une variable tableau dont les champs 5 6 et
#et 7 vont permettre de d�finir la date du fichier
#echo affiche la date et le nom du fichier
array=($(ls -l "$name"))
date=$(echo "${array[5]} ${array[6]} ${array[7]}")
echo "$date $name"
#je teste maintenant si $NAME existe cad $name modifi�
#en majuscules dans $SYNCDIR
if [ -f "$NAME" ]
then
#il existe -> recherche de la date
#pr�c�demment puis echo
ARRAY=($(ls -l "$NAME"))
DATE=$(echo "${ARRAY[5]} ${ARRAY[6]} ${ARRAY[7]}")
echo "$DATE $NAME"
#puis recherche si $date et $DATE sont
#identiques
if [ "$DATE" = "$date" ]
then
echo "$name et $NAME ont les m�mes
dates"
else
echo "$name et $NAME ont des dates
diff�rentes"
fi
else
echo "$NAME n'existe pas"
fi
echo
done
vala. tel qu'il est ce script, lorsque find trouve ./toto, cherche si $SYNCDIR/TOTO
existe et s'il existe te dit si ./toto et $SYNCDIR/TOTO ont la m�me date.
maintenant � toi de jouer ;)
bye
jipe
Vous souhaitez acquerir votre Pack ou des Services MandrakeSoft?
Rendez-vous sur "http://www.mandrakestore.com"