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

Linux Discussion :

comparer deux répertoires sous linux


Sujet :

Linux

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut comparer deux répertoires sous linux
    j'ai 2 repertoires rep1 et rep2.J'aimerais afficher la liste des fichiers de rep1 qui ne se trouvent pas dans rep2.Et si possible copier ces nouveaux fichiers du rep1 vers rep2
    je pensais a la syntaxe diff rep1/ rep2/.
    Mais je crois que c'est pas bon.
    si vous avez une idée
    merci

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in rep1/*; do if [ -f "$f" -a ! -f "rep2/${f##*/}" ]; then echo "cp $f rep2/${f##*/}"; fi; done
    ...
    ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in rep1/*; do if [ -f "$f" -a ! -f "rep2/${f##*/}" ]; then echo "cp $f rep2/${f##*/}"; fi; done
    ...
    ?
    c'est top ca marche !
    j'ai enlevé echo
    Citation Envoyé par N_BaH Voir le message
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in rep1/*; do if [ -f "$f" -a ! -f "rep2/${f##*/}" ]; then cp $f rep2/${f##*/}; fi; done
    ...
    ?
    il ya 2 trucs que j'ai pas compris
    -a !
    et
    ${f##*/}
    en tout cas bravo pour ta rapidité

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    help test
    [...]
        Other operators:
     
          -o OPTION      True if the shell option OPTION is enabled.
          ! EXPR         True if expr is false.
          EXPR1 -a EXPR2 True if both expr1 AND expr2 are true.
          EXPR1 -o EXPR2 True if either expr1 OR expr2 is true.
    [...]
    et pour ${f##*/} regarde le man bash, à Remplacement des paramètres Parameter Expansion en anglais)
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    désolé de te repondre si tard n_bah car je cherchais à comprendre
    ${f##*/}
    .
    j'ai trouvé un lien expliquant celà
    http://man.developpez.com/man1/bash.1.php#L25
    mais franchement j'ai vraiment un peu de mal à comprendre
    je ne comprends rien à cette explication
    ${paramètre##mot}
    Le mot est développé pour fournir un motif, comme dans l'expansion des noms de fichiers. Si le motif correspond au début de la valeur du paramètre, alors le développement prend la valeur du paramètre après suppression du plus petit motif commun (cas ``#''), ou du plus long motif (cas ``##''). Si le paramètre est @ ou *, l'opération de suppression de motif est appliquée à chaque paramètre positionnel successivement, et le développement donne la liste finale. Si le paramètre est une variable tableau indexée par @ ou *, l'opération de suppression de motif est appliquée à chaque membre du tableau successivement, et le développement donne la liste finale.
    ${paramètre%mot}
    faut me pardonner car je suis un vrai débutant

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    Bonjour,

    dans la forme ${paramètre##mot}, cela efface tout jusqu'au dernier mot (y compris le mot);
    alors que ${paramètre#mot}, efface tout jusqu'au premier mot (y compris le mot)
    exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    var="foo bar baz foo bar baz"
    echo "${var##*bar}"
    baz
    echo "${var#*bar}"
    baz foo bar baz
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    je commence à comprendre.c'est pareil si je fais celà ?
    echo "${var##@bar}"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 552
    Points : 19 392
    Points
    19 392
    Par défaut
    pour les paramètres positionnels :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    maFonction() { printf '%s\n' "${@##*b}";}
    maFonction 'foo bar baz foo bar baz' 'glou bi boul gah' 'ga bu zo me'
    az
    oul gah
    u zo me
    pour les tableaux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    arr=( 'foo bar baz foo bar baz' 'glou bi boul gah' 'ga bu zo me' )
    printf '%s\n' "${arr[@]##*b}"
    az
    oul gah
    u zo me
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    meme si je comprends pas tout .je suis en admiration devant n_bah.merci

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    c'est super ca marche nickel sauf qu'il ne cherche pas dans les sous répertoire de rep2.il doit manquer un commande.
    peut être en ajouter find pour faire une recherche récursivement
    for f in rep1/*; do if [ -f "$f" -a ! -f "rep2/${f##*/}" ]; then echo "cp $f rep2/${f##*/}"; fi; done

  11. #11
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    rsync me parait tout à fait adapté.

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par matafan Voir le message
    rsync me parait tout à fait adapté.
    non je ne peu utiliser rsync car j'utilise le code pour copier dans un autre repertoire rep3
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for f in rep1/*; do if [ -f "$f" -a ! -f "rep2/${f##*/}" ]; then cp $f rep3/${f##*/}; fi; done

  13. #13
    Membre émérite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 515
    Points : 2 505
    Points
    2 505
    Par défaut
    Fallait peut-être le dire dès le début, dans tous tes messages précédents tu copies dans rep2

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    627
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 627
    Points : 118
    Points
    118
    Par défaut
    Citation Envoyé par matafan Voir le message
    Fallait peut-être le dire dès le début, dans tous tes messages précédents tu copies dans rep2
    le problème de départ est résolu .maintenant on peut réutiliser ce code pour en faire plein de chose .c'est quand meme çà le but et comme je comprends mieux ce code je voudrais l'adapter pour en faire pleines de chose .Ca permet de maitrise mieux le en meme temps et pas simplement de faire une copie coller du code et ne rien comprendre

Discussions similaires

  1. Lister les images d'un répertoire sous Linux
    Par NLS le pingouin dans le forum C++
    Réponses: 2
    Dernier message: 10/04/2011, 11h55
  2. Nombre de fichier maximum par répertoire sous Linux et Windows
    Par juju034 dans le forum Administration système
    Réponses: 4
    Dernier message: 30/06/2008, 16h22
  3. Fichiers et répertoires sous linux : c'est quoi ./ et ~/ ?
    Par iDaaX dans le forum Mandriva / Mageia
    Réponses: 3
    Dernier message: 13/11/2007, 13h50
  4. connecter deux pc sous linux
    Par momeftah dans le forum Réseau
    Réponses: 4
    Dernier message: 14/04/2007, 10h48
  5. Réponses: 5
    Dernier message: 06/03/2003, 13h27

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