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 :

Copie de fichiers portant le même nom


Sujet :

Shell et commandes GNU

  1. #1
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut Copie de fichiers portant le même nom
    Bonjour,
    Je souhaite copier des fichiers (gps.txt) qui sont stockés ainsi:
    Un repertoire Z:/BddBrute/DataElec qui contient 58 sous repertoires D1, ..., D58.
    Chacun de ces sous-repertoires D_i contient à son tour H1, ...,H15 sous-repertoires.
    Chaque H_j contient un fichier gps.txt.
    Mon problème est que tous les fichiers que je veux copier portent le même nom dans chque H_j.
    Quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    find Z:/BddBrute/DataElec -type f -name "gps.txt" -exec cp -v '{}' D:/GPS_doc \;
    je ne retrouve que le dernier fichier.
    Je chercher une solution permettant de faire:
    1- soit une concaténation en supprimant la première ligne (nom des colonnes)de chaque fichier
    2- ou soit de copier et renommer en ajoutant un chiffre (ou nombre ) à la fin

    Merci pour vos pistes

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    man cp : --backup=numbered

  3. #3
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    c'est pas plus simple de copier l'arborescence avec tout connement ????
    au lieu de faire du brocolage et de te retrouver avec 2 structures différentes pour la même information ???

    ou mieux encore ne pas faire de copie mais des liens ?!

  4. #4
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Merci pour la réponse mais je n'ai rien compris de ce que tu racontes.
    L'objectif pour moi est de mettre au final ces fichiers dans un SGBD Mysql.
    Au lieu de le faire fichier pas fichier, j'ai voulu faire un script (en php ou java) qui va boucler sur tout le répertoire et les insérer dans la base de données.

  5. #5
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    si c'est ça le but tu fais en fait 3 erreurs ...
    1- on ne mets jamais un fichier dans une base, on l'y indexe uniquement
    2- dans ce cas il suffit de lire les fichiers depuis leurs emplacements actuels, il est totalement inutile de les copier avant.
    3- tes fichiers à noms uniques ne poseront aucun problème si tu crées correctement ta base, puisqu'il y aura un index avec une clef primaire et au moins un champs correspondant au chemin, chacun des deux sera à lui seul une valeur unique, il n'y aura jamais de doublon...

    exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [REF][CHEMIN                      ][           ][             ]
    1     /chemin/vers/structure1/rep1   nomfichier   2013-02-15
    2     /chemin/vers/structure1/rep2   autrefchier   2013-02-14
    3     /chemin/vers/structure2/rep1   nomfichier   2013-02-13
    4     /chemin/vers/structure2/rep2   nomfichier   2013-02-12
    5     /chemin/vers/structure2/rep3   nomfichier   2013-02-11
    6     /chemin/vers/structure2/rep4   nomfichier   2013-02-10

  6. #6
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Ouff, doucement mec pour que je puisse suivre (je ne suis même pas apprenti informaticien).
    Bref, La base de données est déjà créée (avec une clé primaire bien sûr).
    Avant j'avais des fichier csv, je pouvais les importer depuis leurs emplacement vers la base, maintenant j'ai plusieurs milliers de fichiers .txt dont je souhaite importer le contenu dans la base de données.
    ceci dit, l'arborescence est la suivante: "Z:/dataB/dataF/2012-07-16/18h00/gps.txt" et je dois le faire pour des données gps, des données satellites, des données pays, des données sol, ...

    2012-07-16: représente la date de collecte, j'en ai 58
    18h00 : représente l'heure de collecte de données, pour chaque date j'en 12

    Je cherche un moyen qui m'éviterait de les importer un à un, c'est pour cette raison que je souhaite les copier dans un répertoire et faire un script pour les importer dans la base.

  7. #7
    Membre très actif Avatar de unknow0
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 452
    Par défaut
    Citation Envoyé par arm3366 Voir le message
    Je cherche un moyen qui m'éviterait de les importer un à un, c'est pour cette raison que je souhaite les copier dans un répertoire et faire un script pour les importer dans la base.
    faire un script qui en importe un et l'appeler depuis le find?

  8. #8
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par unknow0 Voir le message
    faire un script qui en importe un et l'appeler depuis le find?
    oui c'est l'idée.

    je ferai un petit test si j'ai le temps samedi (mal baré mais bon) pour donner des pistes...

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

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

    pourquoi utiliser find ?
    la hiérarchie des dossiers est connue.
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for f in $chemin/D{1..58}/H{1..15}/gps.txt
    do
       :mysql 'importe '"$f"' dans '"$bdd"
    done
    est-ce que ça va fonctionner sous cygwin
    ...
    ?
    sinon, effectivement, utiliser find.

  10. #10
    Expert confirmé Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    pourquoi utiliser find ?
    la hiérarchie des dossiers est connue.
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for f in $chemin/D{1..58}/H{1..15}/gps.txt
    do
       :mysql 'importe '"$f"' dans '"$bdd"
    done
    est-ce que ça va fonctionner sous cygwin
    ...
    ?
    sinon, effectivement, utiliser find.
    c'est exactment la méthode après faut juste que cygwin soit juste 'ok' en conf pour que ça passe.

  11. #11
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Bonjour,
    Merci pour vos propositions et solutions.
    J'ai essayé la dernière proposition de N_BaH mais malheureusement, ça ne résout pas mon problème, ainsi que l'option de cp --backup=numbered. Ce que je voudrai avoir dans mon répertoire GPS_doc c'est: gps1.txt, gps2.txt, gps3.txt, ....
    quelque chose qui ressemble à peu pré à ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    for f in find Z:/BddBrute/DataElec -type f -name "gps.txt"
     
    do
        cp f D:/GPS_doc   
    	Renomer f en ajoutant un numero a la fin
    done
    Merci pour un coupe de pouce

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 737
    Par défaut
    Citation Envoyé par arm3366
    ça ne résout pas mon problème
    pourquoi ? comment ?

  13. #13
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Citation Envoyé par arm3366 Voir le message
    ça ne résout pas mon problème, ainsi que l'option de cp --backup=numbered
    Qu'est-ce qui te gène avec cette option ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    $ ls
    fich  rep
     
    $ ls rep/
     
    $ cp --backup=numbered fich rep/
     
    $ ls rep/
    fich
     
    $ cp --backup=numbered fich rep/
     
    $ ls rep/
    fich  fich.~1~
     
    $ cp --backup=numbered fich rep/
     
    $ ls rep/
    fich  fich.~1~  fich.~2~
     
    $ cp --backup=numbered fich rep/
     
    $ ls rep/
    fich  fich.~1~  fich.~2~  fich.~3~
     
    $

  14. #14
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    @
    En premier lieu avec cygwin, j'obtiens commande mysql inconnu.

    Pour importer les données j'ai utilisé la commande sql LOAD DATA LOCAL qui ne fonctionne pas chez moi: problème de configuration et je n'ai pas accès aux fichiers de configurations (j'ai juste un accés un distant via phpmydmin).

    @zipe31: J'ai plus l'extension TXT

  15. #15
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 103
    Par défaut
    Est-ce que tu as déjà une commande fiable pour importer un seul fichier dans la base?
    Si oui, laquelle?

  16. #16
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Aucune autre commande à part LOAD DATA INFILE. Maintenant j'utilise l'option importer de phpmyadmin.
    Je pense concaténer tous mes fichiers en supprimant la première ligne à chaque fois (utilisation de cat pour la concatenation et de grep pour supprimer les entetes ), obtenir ainsi un seul fichier et faire l'importation en une seule fois.

  17. #17
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Par défaut
    Bonjour,

    Voici, la solution que j'ai adoptée:
    Copier tous les fichiers, les concaténer et supprimer les entêtes. J'obtiens ainsi un un fichier bigfile.txt que j'importe dans ma base par le biais de la fonction import de phpmyadmin

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    find Z:/BddBrute/PPL/DataThermique -type f -name "gps.txt" -exec cp -v --backup=numbered '{}' D:/GPS_THERM \;
    cat !(bigfile.txt) > bigfile.txt
    sed "/^[a-zA-Z]/d" bigfile.txt > bigfileGPS_THERM.txt
    Merci pour toutes vos reponses

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/08/2011, 10h55
  2. Réponses: 10
    Dernier message: 24/05/2007, 17h27
  3. [SQL] Unicité d'un champ de résultat portant le même nom
    Par lodan dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/11/2006, 12h39
  4. input portant le même nom
    Par cronos6 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 18/05/2006, 13h29
  5. Regrouper des fichiers sous un même nom
    Par Azharis dans le forum C++
    Réponses: 7
    Dernier message: 22/06/2005, 13h05

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