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 :

[Shell] Supprimer tous les fichiers sauf XX et YY


Sujet :

Linux

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut [Shell] Supprimer tous les fichiers sauf XX et YY
    Bonjour,

    Je cherche un script simple permettant de supprimer tous les fichiers d'un répertoire, sauf ceux indiqués dans une liste (ici XX et YY) du genre XX|YY... J'ai écrit un script, mais le "|" semble poser problème puisque tout est supprimé. Si je mets seulement XX ou YY, ça fonctionne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for f in `ls | grep -v -e 'XX|YY'`
    do
         echo Suppression de $f
         rm -rf $f
    done
    Une idée ? Merci.

  2. #2
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for file in `ls -l` 
    do
      test=`cat file_exclude | grep "$file"`
      if [ -z "$test" ]; then
        rm -rf $file
      fi
    done
    y a une multitude de solution biensur
    "Voyager, c'est découvrir que tout le monde a tort", Aldous Huxley
    "Less is more" Ludwig Mies Van Der Rohe

    Risk & Security Mgmt

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    J'aurais bien aimé reprendre l'idée d'expression régulière, pour être sûr que le nom du fichier correspond parfaitement. Ceci, parce que la liste des fichiers à conserver sera passée en (un seul) argument, avec un séparateur entre chaque.

    Je vais quand même essayer avec ce que tu m'as donné. Merci.

  4. #4
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Si tu mets la liste des fichiers a ne pas supprimer dans ton fichier file_exclude ca ne devrait pas poser de probleme.
    "Voyager, c'est découvrir que tout le monde a tort", Aldous Huxley
    "Less is more" Ludwig Mies Van Der Rohe

    Risk & Security Mgmt

  5. #5
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    Si la liste contient WXYZ et que le fichier s'appelle XYZ, il sera supprimé, non ?

  6. #6
    Membre chevronné
    Avatar de Anthony.Desvernois
    Homme Profil pro
    Ingénieur sécurité & risque
    Inscrit en
    Juin 2007
    Messages
    1 489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur sécurité & risque
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 489
    Points : 2 244
    Points
    2 244
    Par défaut
    Oui, enfin plutot dans le sens que je le pensais il ne sera pas supprimer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for FILE in `ls -l` 
      TEST=""
      while read AGARDER
      do
         if [ "$AGARDER" = "$FILE" ]; then
           TEST="false"
         fi
      done < file_exclude
      if [ -z "$TEST" ]; then
        rm -rf $FILE
      fi
    done
    ou file_exclude contient les fichiers a ne pas supprimer

    Sinon c'est vraiment crade, il y a forcement mieux.
    "Voyager, c'est découvrir que tout le monde a tort", Aldous Huxley
    "Less is more" Ludwig Mies Van Der Rohe

    Risk & Security Mgmt

  7. #7
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    Oui, j'ai encore du mal à y voir clair... c'est pour ça que j'ai ouvert un nouveau sujet avec une question plus précise, qui me permettra peut-être de trouver une solution simple (sur la base de celle que j'avais proposée) : http://www.developpez.net/forums/sho....php?p=2334269

    Merci beaucoup en tout cas. Bonne soirée, et à demain peut-être si je n'ai toujours pas réussi !

  8. #8
    Membre éclairé Avatar de BlaireauOne
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    492
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2007
    Messages : 492
    Points : 652
    Points
    652
    Par défaut
    Ton idée d'origine est bonne, il ne manquait que l'option -E
    -E, --extended-regexp
    Interpréter le MOTIF comme une expression rationnelle étendue



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for f in `ls | grep -vE '^XX$|^YY$'`
    do
         echo Suppression de $f
         rm -rf $f
    done
    Autre solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    find . -maxdepth 1 -type f \( ! -name XX -and  ! -name YY \) | xargs rm
    Loi de Murphy:
    La Théorie c'est quand ça ne marche pas mais que l'on sait pourquoi.
    La Pratique c'est quand ça marche mais qu'on ne sait pas pourquoi.
    Quand la théorie rejoint la pratique ça ne marche pas et on ne sait pas pourquoi.

  9. #9
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    J'ai encore un problème avec cette commande et c'est à n'y rien comprendre. Tous les fichiers sont effacés, donc je vais exposer l'ensemble du problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for fede in `ls $D_PATH | grep -vE '^(${13})$'`
    do
         rm -rf $D_PATH/$fede
    done
    Le script shell est appelé via un script ANT du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <exec executable="monScript.sh" failonerror="true">
         <arg value="..."/>
         ....
         <arg value="ffct|ffrs|ffsa"/>
    </exec>
    Voici les tests faits dans le script shell. Les commandes suivantes renvoient les mêmes résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ls $D_PATH
    ls $D_PATH | grep -vE '^(${13})$'
    alors que la commande semble être correcte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo "ls $D_PATH | grep -vE '^(${13})$'"
    => ls ... | grep -vE '^(ffct|ffrs|ffsa)$'
    et que le répertoire visé contient bien des répertoires ffct, ffrs et ffsa.


  10. #10
    Membre régulier
    Inscrit en
    Novembre 2003
    Messages
    245
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 245
    Points : 106
    Points
    106
    Par défaut
    J'ai essayé avec un exemple plus simple. C'est un problème d'argument manifestement... mais je ne vois pas ce qui se passe ni comment faire.

Discussions similaires

  1. [Batch] Supprimer tous les fichiers sauf extensions
    Par freedom144 dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 13/04/2013, 22h20
  2. copier tous les fichiers sauf les dossiers
    Par chicho dans le forum VBScript
    Réponses: 6
    Dernier message: 06/09/2006, 16h58
  3. Réponses: 3
    Dernier message: 22/05/2006, 17h00
  4. [VBA Excel] supprimer tous les onglets sauf un
    Par drinkmilk dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 09/11/2005, 18h11
  5. Réponses: 4
    Dernier message: 24/09/2004, 10h17

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