Retourner aux forums || Retourner au forum Programmation.shell

Programmation.shell : Supprimer liste de fichier en bash

Posté par alfafa () le 26 mai 2008
0
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.

> Lire le message (14 commentaires, moyenne: 3,1).  

Cette discussion est archivée, il n'est plus possible de laisser des commentaires.

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

ca ressemble à un devoir...

Posté par NeoX () le 26/05/2008 à 15:51. (lien). É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...

--
Apprendre par les autres, c'est bien.
Apprendre par soi-meme (RTFM, man, et notre ami google) c'est mieux
  • [^]Re: ca ressemble à un devoir...

    Posté par mekare () le 26/05/2008 à 17:27. (lien). É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 Xavier (page perso, ) le 26/05/2008 à 15:53. (lien). Évalué à 1.

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

par exemple.

--
Good judgement comes from experience and experience comes from bad judgement |
Faisez la mouche pas la guêpe...
  • [^]Re: for qui tue

    Posté par Obsidian () le 26/05/2008 à 16:09. (lien). É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 furai (page perso, ) le 26/05/2008 à 16:22. (lien). É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 Obsidian () le 26/05/2008 à 16:40. (lien). É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 Etienne () le 26/05/2008 à 17:00. (lien). É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 Obsidian () le 26/05/2008 à 18:56. (lien). Évalué à 2.

            (Vrai, mais déjà précisé au dessus).

    • [^]Re: for qui tue

      Posté par Etienne () le 26/05/2008 à 16:42. (lien). É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 Obsidian () le 26/05/2008 à 16:46. (lien). Évalué à 2.

        Je pertinente avec véhémence !

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

Clos

Posté par alfafa () le 26/05/2008 à 16:16. (lien). É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 jigso () le 26/05/2008 à 17:24. (lien). Évalué à 6.

xargs -a a_supp.lst rm

  • [^]Re: Il y avait plus court...

    Posté par jigso () le 26/05/2008 à 17:27. (lien). Évalué à 0.

    Et pour éviter les pbs si la ligne de commande est trop longue :

    xargs -a a_supp.lst -d \n rm

    • [^]Re: Il y avait plus court...

      Posté par jigso () le 26/05/2008 à 17:34. (lien). Évalué à 0.

      PS : oubliez le commentaire précédent, c'est une connerie, désolé...

Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell