Malgré les fiabilité et débit sans cesse croissants des communications Internet ... Il arrive encore régulièrement qu'un transfert de fichier soit interrompu ou parfois corrompu, et ce d'autant plus probablement que sa taille est importante ou que le site sur lequel le récupérer est grandement sollicité. 1) archivage, compression et découpage en morceaux (1 combinaison) ditto -c -k --keepParent --sequesterRsrc -V dossier_source - | (cd dossier_temporaire ; split -b 1m) NOTE concernant split (extrait de sa page man) : For historical reasons, if you specify name, split can only create 676 separate files. The default naming convention allows 2028 separate files. 2) calcul des sommes de contrôles cd dossier_temporaire ; md5 [x-z][a-z][a-z] > MD5_avant_envoi.txt 3) envoi des morceaux [AVEC fichier des sommes de contrôle] (1 combinaison) ls [xyz][a-z][a-z] MD5.txt | xargs -L 1 -J FICHIER curl -T FICHIER ftp://identifiant:mot_de_passe@ordinateur_distant/dossier_destination/ PLUS SIMPLE : ls [xyz][a-z][a-z] MD5.txt | xargs -L 1 curl -T FICHIER ftp://identifiant:mot_de_passe@ordinateur_distant/dossier_destination/ -T 4) récupération des morceaux ftp carole@localhost:OFFICE/MD5_avant_envoi.txt ftp -T get,14k carole@localhost:OFFICE/"[x-z][a-z][a-z]" si vous voulez éviter de pénaliser ... Pour ne plus avoir à saisir le mot de passe ... echo machine localhost password isatis > .netrc ; chmod go-r .netrc 5) vérification des sommes de contrôle md5 [xyz][a-z][a-z] > MD5_apres_reception.txt diff MD5* 6) agrégation des morceaux et désarchivage (1 combinaison) cat [xyz][a-z][a-z] | ditto -x -k --sequesterRsrc -V - /tmp/avecseqrsrc stdin stdout tar O O ditto O O bzip O O split O N md5 O O MAIS ça ne sert pas à grand chose xargs le tout en une combinaison comme suit : tar cf - DOSSIER_QUELCONQUE | bzip2 -c | split -b 2m - /DOSSIER_DESTINATION/PREFIXE_FICHIERS ditto -c -rsrcFork Scripts -|ssh rhost ditto -x --rsrc - ./Scripts --sequesterRsrc implique -rsrcFork (alias --rsrc) : OUI ! -z (compression) -k (PKZip) implique -z : OUI ! (c'est si vrai qu'on ne peut combiner -k ET -z ! ) implique -c : NON ! [ --keepParent ] [ -V ] NOTE : ajouter explicitement l'extension .zip (ditto ne s'en charge pas) EXEMPLE : ditto -c -k --keepParent --sequesterRsrc -V dossier_source archive.zip faire ce qui suit avec une boucle ET seulement ensuite avec xargs pour en montrer clairement l'intérêt ls /DOSSIER_DESTINATION/PREFIXE_FICHIERS* | xargs -L 1 -J MORCEAU curl -T MORCEAU ftp://IDENTIFIANT:MOT_DE_PASSE@SERVEUR_FTP/DOSSIER_DESTINATION/ NOTE : le ftp de Mac OS X (lukemftp) s'acquitte très bien des transferts (??réception ET?? émission) de plusieurs fichiers à la fois. Exemple : ftp -v -u ftp://yannick:y020867@robert/ *.eps L'option -u c'est pour upload, -v pour verbose PARFAIT : IL SUFFIT D'UTILISER L'UN POUR L'ENVOI (curl) ET L'AUTRE POUR LA RECUPERATION (ftp) ! m md5 pour valider le transfert des fichiers "splittés" (dans le détail pour être capable d'identifier UN fichier corrompu qui sera le seul à devoir être renvoyé) PUIS cat pour réassembler le TOUT ! TOUJOURS pour xargs : ls *.zip | xargs -n 1 unzip -t ou ls *.zip | xargs -n 1 unzip -t | grep testing ---------------------- POUR SVM Mac : Pour un prochain Terminal, je propose de mettre en oeuvre quelques nouvelles commandes pour arriver à UN objectif, à savoir transférer un ensemble de fichiers volumineux vers un site FTP et comment les récupérer. Cela a l'air trivial mais cela soulève en réalité des problèmes en cascade que des commandes vraiment "sympathiques" permettent de résoudre. En clair, qui dit volumineux dit transfert (autant en émission qu'en réception) long et par conséquent sujet à un important risque de coupure. Début de solution : compresser les données. Complément de solution : couper en petits morceaux. Deuxième souci, comment s'assurer de l'intégrité des données une fois les transferts réalisés ? Solution : utiliser un système de chiffrement. Troisième souci : comment transférer plusieurs morceaux en un minimum de commandes ? Solution : adopter un programme d'énumération OU un programme de transfert capable de manipuler un ensemble de fichiers (les deux sont vus, un en envoi, le second en réception) Quatrième souci : comment reconstituer une archive complète à partir des morceaux récupérés Solution : en "regroupant" les morceaux et on en profite dans la foulée pour décompresser les données à la volée J'ai omis un détail, c'est qu'à la base, on commence par créer une archive pour conserver, outre les données, le maximum de métadonnées aussi. Point supplémentaire : un avantage supplémentaire et pas des moindres de découper en petits morceaux réside dans la possibilité de ne re-transférer qu'un volume réduit de données si une corruption est détectée dans un des morceaux plutôt que de perdre un temps précieux à recommencer un long chargement. Voilà, je me propose de voir tout cela, ce qui permet de montrer un maximum de commandes pour réaliser une tâche précise.