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 POSIX Discussion :

Utilisation conjointe de xargs et rm


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Responsable Prépresse
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Prépresse
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut Utilisation conjointe de xargs et rm
    Bonjour,

    quelques soucis avec l'utilisation conjointe de xargs et rm.

    Je dois supprimer quelques fichiers que je trouve grace à :
    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
    iMac-Laurent:~ imaci7_1$ find "/Users/imaci7_1/Desktop/POUR TESTS AS UNIX" -name "BAT *.jpg" -or -name "BAT *.jpeg" -or -name "*.pdf" -or -name "*.png" | grep "/BAT/" | xargs -0
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/CIDRE DE GLACE/BAT/BAT ET Cidre de Glace copie.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie 2.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.png
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/LACHETEAU/dossier sans titre/BAT/ET r52000_001.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/LACHETEAU/dossier sans titre/BAT/ET r52000_001.png
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_001.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_004.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_005.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_006.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL+CE r58000_007.pdf
     
    iMac-Laurent:~ imaci7_1$
    J'ai pipé xargs pour voir le résultat, vu que je découvre la commande. Apparemment je trouve bien une liste dont chaque ligne est séparée par un saut de ligne. Notez la ligne vide (14) à la fin.

    Mais, lorsque j'y ajoute rm la suppression ne fonctionne pas:
    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
    iMac-Laurent:~ imaci7_1$ find "/Users/imaci7_1/Desktop/POUR TESTS AS UNIX" -name "BAT *.jpg" -or -name "BAT *.jpeg" -or -name "*.pdf" -or -name "*.png" | grep "/BAT/" | xargs -0 rm
    rm: /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/CIDRE DE GLACE/BAT/BAT ET Cidre de Glace copie.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/CIDRE DE GLACE/BAT/BAT ET r52000_001 copie.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie 2.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.jpg
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/BAT/BAT ET r52000_001 copie.png
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/LACHETEAU/dossier sans titre/BAT/ET r52000_001.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/GLACÉ MOELLEUX DE CIDRE/LACHETEAU/dossier sans titre/BAT/ET r52000_001.png
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_001.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_004.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_005.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL r58000_006.pdf
    /Users/imaci7_1/Desktop/POUR TESTS AS UNIX/AGENCE A JETER/KERISAC/BAT/BAT ET+COL+CE r58000_007.pdf
    : File name too long
    iMac-Laurent:~ imaci7_1$
    J'ai fait un autre test en oubliant -0 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    iMac-Laurent:~ imaci7_1$ find "/Users/imaci7_1/Desktop/POUR TESTS AS UNIX" -name "BAT *.jjjj" | grep "/BAT/" | xargs rm -i
    rm: /Users/imaci7_1/Desktop/POUR: No such file or directory
    rm: TESTS: No such file or directory
    rm: AS: No such file or directory
    rm: UNIX/AGENCE: No such file or directory
    rm: A: No such file or directory
    rm: JETER/GLACÉ: No such file or directory
    rm: MOELLEUX: No such file or directory
    rm: DE: No such file or directory
    rm: CIDRE/BAT/BAT: No such file or directory
    rm: ET: No such file or directory
    rm: r52000_001: No such file or directory
    rm: copie.jjjj: No such file or directory
    iMac-Laurent:~ imaci7_1$
    et là je me dis que c'est peut être un problème d'interprétation des " ", au moins dans ce dernier cas.

    Bref, je sèche.

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

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

    la commande find n'a-t-elle pas d'option -delete sur UNIX ?

    xargs -0 serait utile avec -print0, mais ça ne résoudrait pas les problèmes liés aux espaces dans les noms des fichiers, que rm n'identifie pas.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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

    Est-ce que la syntaxe suivante règle la question ?

    ou

  4. #4
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    la commande find n'a-t-elle pas d'option -delete sur UNIX ?
    Pas forcément, "-delete" n'est pas POSIX.

    xargs -0 serait utile avec -print0, mais ça ne résoudrait pas les problèmes liés aux espaces dans les noms des fichiers, que rm n'identifie pas.
    "xargs -0" et "print0" ne sont pas POSIX non plus.


    Voici une méthode portable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find "/Users/imaci7_1/Desktop/POUR TESTS AS UNIX" -name "BAT *.jpg" -o -name "BAT *.jpeg" -o -name "*.pdf" -o -name "*.png" -exec \
        sh -c 'for file do case "$file" in (*/BAT/*) ;; (*) rm "$file";; esac; done' sh {} +

  5. #5
    Membre averti
    Homme Profil pro
    Responsable Prépresse
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Prépresse
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut Pfff !!!
    Merci pour vos réponses.

    J'ai bien vu une option -delete pour find, mais ma recherche porte sur des fichiers bien précis (ok pour find dans ce cas) se trouvant dans les répertoires BAT (de ce que j'ai compris, je peux chercher des noms de fichiers mais pas des chemins avec find) d'où le pipe de grep.

    Je n'ai pas encore eu le temps de tester vos deux dernières réponses, mais je dois avouer que je ne les comprends pas.

    Je manque de formation sur Unix, pouvez vous me conseiller un cours, si possible en Français, qui pourra m'amener à la compréhension (puis l'écriture) de vos réponses ? Je suis conscient que cela ne se fera pas en quelques jours.
    Je suis responsable prépresse dans une imprimerie. Mes besoins de "base" sont en gros :
    trouver des fichiers, en supprimer, en déplacer, en renommer.

  6. #6
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par hopus Voir le message
    J'ai bien vu une option -delete pour find, mais ma recherche porte sur des fichiers bien précis (ok pour find dans ce cas) se trouvant dans les répertoires BAT (de ce que j'ai compris, je peux chercher des noms de fichiers mais pas des chemins avec find) d'où le pipe de grep.
    Ooops, j'avais compris le contraire.

    Voici ma solution corrigée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    find "/Users/imaci7_1/Desktop/POUR TESTS AS UNIX" -name "BAT *.jpg" -o -name "BAT *.jpeg" -o -name "*.pdf" -o -name "*.png" -exec \
        sh -c 'for file do case "$file" in (*/BAT/*) rm "$file";; esac; done' sh {} +

  7. #7
    Membre averti
    Homme Profil pro
    Responsable Prépresse
    Inscrit en
    Août 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Responsable Prépresse
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Août 2015
    Messages : 21
    Par défaut
    J'ai cru apercevoir du coin de l'oeil quelques fichiers disparaître, mais pas sûr.
    J'ai travaillé sur un autre dossier test plus simple mais rien ne se produit.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 25/05/2010, 21h52
  2. Réponses: 3
    Dernier message: 19/05/2008, 12h52
  3. utiliser ls et xargs pour déplacer des fichiers
    Par walrus_55 dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 06/04/2007, 10h22
  4. utiliser conjointement JML et Generics
    Par goldorax113 dans le forum Langage
    Réponses: 2
    Dernier message: 21/10/2006, 00h40
  5. [PEAR][HTML_QuickForm] Utilisation conjointe des packages QuickForm et Table
    Par Vrylx dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 30/09/2006, 20h52

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