Forum Programmation.shell Supprimer liste de fichier en bash

Posté par  .
Étiquettes : aucune
0
26
mai
2008
Bonjour,
J'ai vu cette astuce plusieurs fois sur des forums, mais ne l'ayant jamais utilisée, je ne l'ai pas retenue.

J'ai enregistré une liste de fichier dans un fichier texte a_supp.lst
J'aimerais effacé les fichiers contenus dans ce fichier texte par une ligne bash.
Il y a un nom de fichier par ligne.

Merci pour votre aide, google ne m'a pas beaucoup aidé, les réponses sont trop larges.
  • # ca ressemble à un devoir...

    Posté par  . Évalué à 1.

    en francais dans le texte (en algorythmie quoi)


    boucler POUR chaque fichier PROVENANT de la liste
    FAIRE
    effacer le fichier
    FIN de la boucle


    autrement dit,
    va lire ton cours...
    • [^] # Re: ca ressemble à un devoir...

      Posté par  . Évalué à 4.

      autrement dit,
      va lire ton cours...


      Un peu facile comme réponse. Un lien vers un manuel ou un tuto ne serait pas du luxe. Tout le monde ici n'a pas forcément eu la chance d'avoir eu des cours de shell ou de dev dans sa vie (j'en fait partie et recevoir des réponses de ce genre ne fait pas avancer car on ne sais même pas où chercher). Je sais que quelqu'un a mis la réponse plus bas, mais pour l'auteur du post c'est je pense à lire (voir "Boucle for") : http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP20(...)
  • # for qui tue

    Posté par  . Évalué à 1.

    for i in `cat fichier`;do rm $i;done

    par exemple.
    • [^] # Re: for qui tue

      Posté par  . Évalué à 9.

      Ou encore

      while read i ; do read i ; rm "$i" ; done < fichier

      Ça a le mérite à la fois d'éviter d'ouvrir un sous-shell et de bufferiser tout le contenu pour l'évaluer en ligne dan le for, mais également de gérer les noms de fichiers à espace, le for i in ... utilisant l'espace comme séparateur de token. Le while le fait aussi, mais quand il ne reste qu'une variable à remplir, il met tout le restant de la ligne dedans.
      • [^] # Re: for qui tue

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

        Ou faire confiance à bash :
        rm $(cat a_supp.lst)
        
        Résultat : pas de for, pas de while...
        • [^] # Re: for qui tue

          Posté par  . Évalué à 3.

          Super concis, mais mêmes problèmes : UUOC, sous-bash, et buffer géant sur la ligne à interpréter à postériori.
          • [^] # Re: for qui tue

            Posté par  . Évalué à 2.

            Et ça a aussi l'énorme avantage de correctement supprimer les fichier contenant un espace. Ce qui n'est pas le cas du bourrin rm $(cat fichier)

            Étienne
      • [^] # Re: for qui tue

        Posté par  . Évalué à 6.

        Il y a juste une petite coquille, tu fais 2 read au lieu d'un :
        while read i
        do
            rm "$i"
        done < fichier


        Étienne
        • [^] # Re: for qui tue

          Posté par  . Évalué à 2.

          Je pertinente avec véhémence !

          Ça m'apprendra (une fois de plus) à me relire.
  • # Clos

    Posté par  . Évalué à 4.

    Merci,
    Je me demandais comment changer de ligne dans une boucle !
    Je devrais prendre quelques cours supplémentaire.

    Encore merci.
  • # Il y avait plus court...

    Posté par  . Évalué à 6.

    xargs -a a_supp.lst rm

Suivre le flux des commentaires

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