IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Modification atomique d'un ensemble de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 36
    Par défaut Modification atomique d'un ensemble de fichiers
    Bonjour

    Je ne suis pas certain que mon pb soit dans la bonne section, mais je tente.

    J'ai besoin d'effectuer une transaction atomique sur un ensemble de fichiers (et non fichier par fichier). Typiquement un move dans un même file system.

    Bon en fait mon pb à la base, c'est qu'un traitement (que je peux modifier) déplace des fichiers dans un répertoire pollé par un daemon (sur lequel je n'ai pas la main). Ce dernier se base sur les dates de modification pour ne traiter que les nouveaux fichiers, mais sa précision est la seconde, ce qui fait que certains fichiers créés dans la même seconde peuvent passer à la trappe si le daemon se lance au mauvais moment. D'où le besoin pour moi que le daemon voit : soit rien de nouveau, soit l'ensemble des nouveaux fichiers, mais pas une partie.

    Merci

  2. #2
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 653
    Par défaut
    Bonjour,

    ¿
    transaction atomique ?
    pollé ?
    ?

    je n'ai pas tout compris
    avant de déplacer les fichiers tu dois vérifier que certains ont une date de modification identique, et dans ce cas faire un touch pour décaler cette heure.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 36
    Par défaut
    Peut être aurais je du dire opération atomique.
    Et pollé, bah... petit barbarisme de "polled".

    Un touch ne résoudrait pas mon pb. Aucun fichier n'a une date identique et j'ai quand même mon pb, qui est lié à l'imprécision du daemon sur les dates (à la seconde).
    En clair j'ai besoin de faire un mv sur l'ensemble des fichiers, et que ce mv soit atomique pour l'ensemble et non fichier par fichier.

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 653
    Par défaut
    tout ça semble être des gros mots pour un "problème" très simple : tu ne sais pas passer une liste de fichier à la commande mv ?

    Aucun fichier n'a une date identique
    comment le détermines-tu ?
    imprécision du daemon sur les dates (à la seconde).
    comment le sais-tu ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 347
    Par défaut
    Bonjour,

    Avec mv, tu peux déplacé n fichier à la fois, il faut juste que le dernier argument soit la destination (et donc dans ce cas, se sera un répertoire).

    Après pour un déplacement véritablement atomique, il faudrait que tu ne déplace qu'un seul objet, donc la solution pourrait-être la suivante:

    -Prérequis indispensable: le déplacement doit se faire sur le même système de fichier.
    -Et au lieu de déplacer n fichiers, il suffirait de ne déplacer qu'un répertoire qui contient la totalité des fichiers, comme cela tu ne déplacera que le répertoire, il n'y aura pas de déplacement réel des fichiers.

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur
    Inscrit en
    Septembre 2015
    Messages
    36
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2015
    Messages : 36
    Par défaut
    tout ça semble être des gros mots pour un "problème" très simple : tu ne sais pas passer une liste de fichier à la commande mv ?
    Si, faut pas déconner xD
    Mais mv est il atomique pour l'ensemble ou par fichier? Par fichier je dirais...

    Aucun fichier n'a une date identique
    comment le détermines-tu ?
    Je le sais car c'est mon code qui crée ces fichiers. Et un petit ls --full-time montre bien que les dates ne sont pas les mêmes.

    imprécision du daemon sur les dates (à la seconde).
    comment le sais-tu ?
    L'industriel l'a confirmé suite à mes soupçons (une sombre histoire de méthode java File.lastModified() qui arrondi à la seconde sur linux).

    Ouf, interrogatoire terminé

    -Prérequis indispensable: le déplacement doit se faire sur le même système de fichier.
    -Et au lieu de déplacer n fichiers, il suffirait de ne déplacer qu'un répertoire qui contient la totalité des fichiers, comme cela tu ne déplacera que le répertoire, il n'y aura pas de déplacement réel des fichiers.
    Oui j'avais déjà pensé à ça (déplacer le répertoire afin de n'avoir qu'une opération) mais je ne peux pas, les fichiers doivent se situer au 1er niveau d'un répertoire déjà existant contenant d'autres fichiers qui ne doivent pas être effacés.

  7. #7
    Membre Expert
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Avril 2008
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 875
    Par défaut
    il faut que tu joues avec la commande touch.

    Elle peut prendre des arguments pour modifier atime et mtime avec une valeur prédéfinie à l'avance.

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    touch -at 0711171533 ./try
    modifie la date d'accès pour lui donner 2007-11-17 15:33:00.

    Si j'ai bien compris ton problème tu vas pouvoir affecter une date antérieure à la date courante (de quelques secondes) dans une variable, puis déplacer ton fichier et enfin affecter la date dans la variable sur atime ou mtime avec touch sur le fichier déplacé.

  8. #8
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 288
    Par défaut
    Bonjour

    Si on résume, on a un traitement qui produit des fichiers, éventuellement dans la même seconde, et le daemon est trop bête pour considéré que deux fichiers peuvent être dans la même seconde lorsqu'il les traite et déplace.

    Tu peux faire un script, avec une boucle qui passe en revue les fichiers, récupère la date de modification, et la décale si elle est déjà utilisée.
    Les commandes utiles : find, stat, for, touch, date

Discussions similaires

  1. Find & replace sur un ensemble de fichiers
    Par totofweb dans le forum Shell et commandes GNU
    Réponses: 14
    Dernier message: 23/12/2005, 14h29
  2. Determiner la taille d'un ensemble de fichiers
    Par devdev2003 dans le forum Linux
    Réponses: 12
    Dernier message: 24/08/2005, 11h38
  3. [ANT] unjar un ensemble de fichiers jar
    Par smash31 dans le forum ANT
    Réponses: 1
    Dernier message: 30/06/2005, 16h39
  4. Nombre ligne dans un ensemble de fichier
    Par devdev2003 dans le forum Linux
    Réponses: 8
    Dernier message: 13/05/2005, 18h59
  5. Compresser et decompresser un ensemble de fichier
    Par Walm dans le forum C++Builder
    Réponses: 2
    Dernier message: 12/01/2004, 16h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo