Forum Programmation.shell comment effacer tous les fichiers sauf un

Posté par  .
Étiquettes : aucune
0
18
oct.
2005
Bonjour,

Comment faire pour effacer tous les fichiers d'un répertoire sauf un précis ?
voila j'ai le répertoire /mes_fichiers dans ce répertoire il y a plusieurs fichiers qui ce créé avec des noms aléatoires.
Ce que je souhaite, c'est effacer sans connaître leurs tous les fichiers sauf un précis.
Nom du fichier précis : mon_fichier.txt

Comment faire ?

Merci pour toutes réponses.
  • # simplement

    Posté par  . Évalué à 3.

    en faisant un :
    cp /mesfichiers/mon_fichier.txt /tmp/
    rm -rf /mesfichier/*
    cp /tmp/mon_fichier.txt /mesfichiers/

    tu mets tout ca dans un script, et tu obtiens la commande que tu veux .

    faut pas chercher compliquer ! Ou peut etre ai-je mal compris ce que tu veux faire.
    • [^] # Re: simplement

      Posté par  (site web personnel) . Évalué à 2.

      faut pas chercher compliquer ! Ou peut etre ai-je mal compris ce que tu veux faire.

      ls | grep -v mon_fichier.txt | xargs rm

      sans rancune ^_^
      • [^] # Re: simplement

        Posté par  (site web personnel) . Évalué à 3.

        ne marche pas si il y a un espace dans le nom.

        ne marche pas pour mon_fichier.txt.old


        sans rancune ^_^
        • [^] # Re: simplement

          Posté par  . Évalué à 1.

          ls | grep -v '^mon_fichier.txt$' | xargs rm
          Ca résoud pas le pb de l'espace, mais ça marche pour .mon_fichier.txt~ ^^
        • [^] # Re: simplement

          Posté par  (site web personnel) . Évalué à 2.

          +ne marche pas si y a plus que 1 024 caracteres au total
          On continue ? :)
      • [^] # Re: simplement

        Posté par  . Évalué à 2.

        on peut aussi taper moins de caractère et faire un truc genre
        rm `ls | grep -v mon_fichier.txt`

        à part que les backquote sont un peu chiant à choper sur un azerty :)

        sinon, doit y avoir moyen de faire ça avec l'expansion du shell aussi.
        D'ailleurs, quelques minutes de man et quelques essais plus tard, en bash,


        shopt -s extglob
        rm !(mon_fichier.txt)

        ça doit le faire
  • # Highlander

    Posté par  (site web personnel) . Évalué à 4.

    Un seul survivra !

    -->[] poussez pas j'suis deja dehors.
    • [^] # Re: Highlander

      Posté par  (site web personnel) . Évalué à 3.

      plus sérieusement tu peux faire ca :
      ls | grep -v mon_fichier.txt | xargs rm
      • [^] # Re: Highlander

        Posté par  . Évalué à 1.

        Ok ça fonctionne.

        Merci et merci a tous pour vos réponses.
  • # et perl ?

    Posté par  (site web personnel) . Évalué à 2.

    en general, je vide un dossier tres rapidement avec :

    perl -e ' unlink $_ for <*.ext>'

    dans ton cas, je ferai un truc dans le genre :

    perl -e ' for my $file ( <*> ) { unlink $file unless grep { $_ eq $file } qw( toto.txt tata.txt tu.txt ); }'

    cela efface tous les fichiers du dossier courant sauf toto.txt tata.txt et tu.txt .
    • [^] # Re: et perl ?

      Posté par  (site web personnel) . Évalué à 3.

      tant qu'a faire illisibl^Hcourt autant le faire jusqu'au bout :

      perl -e ' unlink for <*.ext>'
  • # Avec Bash

    Posté par  . Évalué à 3.

    # Etendre l'expansion des noms sous Bash
    shopt -s extglob
    # On y va
    rm !(mon_fichier.txt)
  • # moi aussi j've jouer :)

    Posté par  . Évalué à 1.

    $ find . -type f | grep -v plop | xargs rm
    • [^] # Re: moi aussi j've jouer :)

      Posté par  . Évalué à 2.

      $ find . -type f | sed '/plop/d' | xargs rm
    • [^] # Re: moi aussi j've jouer :)

      Posté par  . Évalué à 4.

      find . -maxdepth 1 -not -name machin -exec rm -rf '{}' \;

      et ça c'est encore plus puissant car en rajoutant -type d ou -type f on peut choisir si c'est un dossier ou un fichier qu'on veut éliminer.

      en plus ton exemple va effacer en récursif, et va garder les répertoires donc si t'a un répertoire/truc/machin et un répertoire/machin, il va pas supprimer répertoire/truc/machin et il va garder le répertoire.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.