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 :

Supprimer tous les fichiers sauf un


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut Supprimer tous les fichiers sauf un
    Bonjour,

    j'ai un répertoire "OUT" qui contient plusieurs fichiers (fic1,fic2,fic3) sauf que j'ai besoin de supprimer sauf "fic1" et "fic2" et laisser "fic3". sachant que ce petit programme nommé "clear.sh" est à l'extèrieure de "OUT" ?

    j'ai essayé avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for f in `ls | grep -vE '^fic3$'`
    do
         echo Suppression de $f
         rm -rf $f
    done
    mais ça marche pas


    Merci d'avance

  2. #2
    Membre actif
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut
    j'ai essayé avec:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for f in `ls | grep -vE '^OUT/fic3$'`
    do
         echo Suppression de $f
         rm -rf $f
    done
    toujours la même chose, ici il fait rien

    je voulais qu'il entre dans le répertoire "OUT" et de laisser "fic3"

  3. #3
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 349
    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 349
    Par défaut
    Bonjour,

    Tu devrais t'orienter vers la commande find, exemple:
    Mon arborescence:
    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
    $ ls -R OUT
    OUT:
    fic1  fic2  fic3  OUT1
     
    OUT/OUT1:
    fic1
    $ ls -lR OUT
    OUT:
    total 4
    -rw-rw-r-- 1 disedorgue disedorgue    0 oct.  18 20:57 fic1
    -rw-rw-r-- 1 disedorgue disedorgue    0 oct.  18 20:57 fic2
    -rw-rw-r-- 1 disedorgue disedorgue    0 oct.  18 20:57 fic3
    drwxrwxr-x 2 disedorgue disedorgue 4096 oct.  18 21:01 OUT1
     
    OUT/OUT1:
    total 0
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 21:01 fic1
    Ici, on affiche tous les fichiers sauf fic3, mais si on a des sous répertoire, on descend aussi dedans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ find OUT -not -regex ".*fic3" -type f -exec ls -l {} \;
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 20:57 OUT/fic2
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 20:57 OUT/fic1
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 21:01 OUT/OUT1/fic1
    Donc voici une autre option de find qui permet de déterminé le maximum de sous arborescence à visité:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ find OUT -maxdepth 1 -not -regex ".*fic3" -type f -exec ls -l {} \;
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 20:57 OUT/fic2
    -rw-rw-r-- 1 disedorgue disedorgue 0 oct.  18 20:57 OUT/fic1
    Après, il faut certainement que tu améliores le paramétrage de find pour ton besoin, car par exemple ici, la regex est simpliste.

  4. #4
    Membre actif
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut
    merci pour vos suggestions

    mais c'est flou pour moi , je suis novice en shell

    Il n'y a pas une commande qui cherche (c'est find en principe) dans un répertoire et qui efface (rm -r nomdufichier) tout mais ne laisse que un
    tout ça sous la forme d'une condition(while)

    Cordialement,
    Hicham

  5. #5
    Membre actif
    Homme Profil pro
    Doctorant
    Inscrit en
    Février 2010
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2010
    Messages : 19
    Par défaut
    Donc,j'ai pu résoudre mon problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    currentPath=$(pwd)
    cd $currentPath
    cd OUT/
    echo $(pwd)
     
    for f in `ls | grep -vE '^fic3$'`
    do
         echo Suppression de $f
         rm -rf $f
    done
    j'espère bien que ça va aider d'autre beginner same me

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

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

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    > mkdir OUT
    > touch OUT/fichier{1..9}
    > ls -1 OUT/
    fichier1
    fichier2
    fichier3
    fichier4
    fichier5
    fichier6
    fichier7
    fichier8
    fichier9
    Code BASH : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    > shopt -s extglob
    > printf '%s\n' OUT/fichier!([1-3])
    OUT/fichier4
    OUT/fichier5
    OUT/fichier6
    OUT/fichier7
    OUT/fichier8
    OUT/fichier9
    > rm OUT/fichier!(1|2|3)
    > ls -1 OUT/
    fichier1
    fichier2
    fichier3
    >
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

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

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. [Shell] Supprimer tous les fichiers sauf XX et YY
    Par Invité dans le forum Linux
    Réponses: 9
    Dernier message: 25/07/2007, 10h37
  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