Cliquez

Synchronisation des fichiers texte - simple script Perl

Il se trouve que je suis devenu très nécessaire de synchroniser des fichiers entre un ensemble limité de bâton de mémoire et l'ordinateur. A la même main pour copier-et-vient, se souvenant de ce que le dernier fichier édité - fastidieux, et les "monstres" sont inutiles en raison de la tâche primitive de synchronisation, car une synchronisation d'annuaire récursif, et autres cloches et de sifflets je n'ai pas besoin.

J'ai décidé d'esquisser un simple script Perl (parce que Perl est ma maison et au travail, contrairement à par exemple bash), qui se tiendra sur ces dossiers et je les ai synchronisés en fonction à la date de dernière modification, en d'autres termes - les fichiers les plus récents seront remplacés dépassées.

Aussitôt dit, aussitôt fait. Le script compare une paire de fichiers répertoriés dans le hash dans le corps du script et, si nécessaire, effectue la synchronisation. Le texte du script ci-dessous, peut être utile à quelqu'un d'autre que moi:

 #! / Usr / bin / perl
 #=================================================
 # Description: Un script de synchronisation primitive paire de la liste spécifiée
 # Fichiers texte.  La synchronisation est effectuée en fonction du temps
 Dossier # a été modifié.
 #
 # USAGE: Manuel à la liste paire de fichiers% files, entre lesquelles doit
 # Être synchronisés et exécuter le script.
 #
 # Auteur: dimio
 # URL: http://www.dimio.org
 # Version: 0.1
 # Créé: 2010-07-08
 #=================================================
 nécessitent 5.8.8;
 utiliser des avertissements;
 use strict;
 utiliser le codage 'utf8', STDOUT => 'utf8';
 notre $ VERSION = '0 .1 ';

 # Paires de fichiers à synchroniser point dans la liste ci-dessous
 #! L'exactitude des noms ainsi que l'existence de fichiers ne peut pas être vérifié!
 mes fichiers% = (
     '/ Cygdrive/e/tst1/doc_accounting.odb' => './tst2/database.odb »,
     '/ Cygdrive/e/tst1/table.ods' => './tst2/file_for_test.ods »,
     # Et ainsi de suite jusqu'à la victoire
 );

 # Le processus a commencé ...
 foreach my $ fichier (fichiers clés%) {

     if ((stat ($ fichier)) [9]> (stat ($ files {$ fichier})) [9]) {# si le premier fichier est modifié après la seconde - seconde mise à jour

         ouvert (DE, '<', $ fichier) or die "Impossible d'ouvrir $ fichier \ n";
         my @ tmp = <from>;
         à proximité (de);

         ouverte (TO, '>', $ fichiers {$ fichier}) or die "Impossible d'ouvrir les fichiers $ {$ fichier} \ n";
         Imprimer à tmp @;
         proches (TO);

         Imprimer'->'. $ fichiers {$ fichier}. '  est mis à jour de '$ fichier, "\ n".;
     }

     elsif ((stat ($ fichier)) [9] <(stat ($ files {$ fichier})) [9]) {# si une seconde plus tard que la première - première mise à jour

         ouvert (DE, '<', $ fichiers {$ fichier}) or die "Impossible d'ouvrir les fichiers $ {$ fichier} \ n";
         my @ tmp = <from>;
         à proximité (de);

         ouverte (TO, '>', $ fichier) or die "Impossible d'ouvrir $ fichier \ n";
         Imprimer à tmp @;
         proches (TO);

         Imprimer'<-'. $ fichier. '  est mis à jour à partir ', $ fichiers {$ file}, "\ n";
     }

     else {print '= mise à jour n'est pas nécessaire "," \ n ";} # sinon mise à jour n'est pas nécessaire
     # Mais dans des circonstances normales, un changement de temps de Windows varie toujours sur une milliseconde
 }

 exit 0;

PS En passant, une fois de plus heureux que j'utilise Linux - fait une couple de minutes pour la balise script avec une barre d'icônes pour Gnome.
Il est aussi la source du script est disponible, comme toujours, dans le " mou ".

Plus sur les mêmes sujets:

Catégorie Filed under: Linux , Codage | Tag Tags: , , , | Commentaires No Comments

Laisser un commentaire