Copie de nombreux fichiers
De BlaxWiki
Révision datée du 11 mai 2017 à 12:41 par 127.0.0.1 (discussion)
Ce script est à utiliser dans le cas de copie de millions de fichiers, qui ne passent pas via rsync ou cp. Pour info le liste de 13 millions de fichiers utilisait un peu plus de 2Go de ramn, il faut donc s'assurer qu on a assez de ram sur le serveur pour ne pas le crasher.
##### SQUARECLOCK
SRC=/opt/mnt/isilon/squareclock_data/CM/Iterations
DEST=/opt/mnt/isilon-nl400/squareclock_data/CM/Iterations
cd /opt/mnt/isilon/squareclock_data/CM/Iterations
## Avant de lancer le names=(*) il faut etre dans le répertoire source > fichiet ne sert à rien, ca ne met rien dedans. Cette commande va mettre en mémoire la liste de tous les fichiers. La commande est à lancer dans le répertoire Source ##
names=(*)
## Commande pas obligatoire mais qui permet d affichier les fichiers, voir de les mettre dans un fichier
for (( ix=0, cnt=${#names[@]} ; ix<$cnt; ix++ )) ; do echo "${names[ix]}";done
for (( ix=0, cnt=${#names[@]} ; ix<$cnt; ix++ )) ; do echo "${names[ix]}" >> /listfichier;done
## la commande si dessous va lancer la copie, et nous retournera le temps que cela a mis ##
a=0;time for (( ix=0, cnt=${#names[@]} ; ix<$cnt; ix++ )) ; do a=$(($a+1));if [ ! -f $DEST/${names[ix]} ]; then cp -rf $SRC/${names[ix]} $DEST;echo "+${names[ix]}";else echo -n -e "$a\r";fi; done
## le systeme affiche le numero du fichier en cours de traitement (variable a) et copie le fichier si il n’existe pas sur la destination : Donc ne marche que si il n’y a pas de modification de fichier,
## uniquement des creations.