Forum Astuces.divers [Terminal] Virer des fichiers superflus

Posté par  .
Étiquettes : aucune
0
6
juin
2001
Il suffit de lancer la commande find /dossier \( -name "type_de_fichier" -or -name "autre_type" \) -exec rm -rfv {} \; En utilisant crond, on peut ainsi nettoyer régulièrement son disque en otant des core ou backups obsolètes.
  • # Re: Virer des fichiers superflus

    Posté par  . Évalué à 1.

    Personnellement, j'ai l'habitude de mettre un test sur le type de fichier (-type f pour un fichier classique) et de passer par xargs pour ne lancer la commande à exécuter sur les fichiers qu'une seule fois (gain de temps non négligeable si le nombre de fichiers retourné est grand).

    De plus, pour ne pas être gêné par les espaces dans les noms de fichiers, on peut séparer les noms par un caractère nul au lieu d'un espace (couple d'options -print0 et -0 pour find et xargs).

    Ma commande ressemble donc à :
    find /dossier -type f \( -name "foo" -or -name "bar" \) -print0 | xargs -0 rm -rfv

    Enfin, je voudrais pointer les options -iname et -lname de find qui permettent respectivement de faire correspondre le nom de fichier avec une casse non significative et de faire correspondre le nom du fichier pointé par un lien symbolique (-ilname combine les 2). Exemple d'utilisation de -lname pour savoir quand /etc/init.d/iptables est appelé par init :
    find /etc -type l -path '/etc/rc?.d/*' -lname '*/iptables'

    Note : les options que je donne ne sont disponibles que pour les versions GNU de find...
    • [^] # Re: Virer des fichiers superflus

      Posté par  . Évalué à 1.

      Apparement rm ne peut que supprimer un nombre limité de fichier en une seule ligne de commande.
      • [^] # Re: Virer des fichiers superflus

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

        Il suffit de faire un "xargs -n XXX" où XXX est un nombre pas trop petit mais pas trop long pour la ligne de commande (genre 50)
        • [^] # Re: Virer des fichiers superflus

          Posté par  . Évalué à 2.

          Ha ça c'est de l'astuce !

          je me suis toujours emmerdé lorsque le nombre de fichiers était trop grand (pour rm ou d'autres commandes d'ailleurs). On pense à aller voir les man pour l'uilisation générale des commandes, mais des problèmes comme ça, on pense <2nd>qu'ils n'ont pas prévu ces crétins</2nd degre>, alors qu'il suffit de chercher un peu

          Merci pour ce complément d'astuce vraiment intéressant

          PS: je suis nouveau ici, et je vois des -1, des scores qui grimpent. Comment on met +/- à un commentaire ?
          • [^] # Re: Virer des fichiers superflus

            Posté par  . Évalué à 1.

            C'est un lourd débat qui agite DLFP depuis quelque temps. Pour avoir été nouveau aussi (il n'y a que quelques mois que je fréquente le site), je te préviens de suite : ne cherche pas de FaQ ou autre doc, comme aucun d'entre nous (je ne critique personne, pas taper, pas taper) ne s'est pris par la peau des fesses pour le faire, il n'y a, à peu de chose près, aucune explication nulle part sur le sujet.

            Mais en gros il suffit d'attendre (et de faire des commentaires pertinents)

            je te renvoie à http://linuxfr.org/~Salagnac/(...) où sont relatées mes aventures de bleu-bite bleu foncé (maintenant je peux voter, je suis donc bleu-bite bleu clair, arf)

            bon courage !
        • [^] # Re: Virer des fichiers superflus

          Posté par  . Évalué à -1.

  • # Re: Virer des fichiers superflus

    Posté par  (site web personnel, Mastodon) . Évalué à 1.

    sur BSD, il y a l'option -delete de find
  • # Re: Virer des fichiers superflus

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

    Je trouve ça un-peu mal fichu ces commandes, je me demandais si il n'existe pas une commande qui permetrait d'executer n'importe quel commande de façon récurcive dans l'arborescence, style : "rec ./monRep rm -f *.o" tout simplement puisque rm n'est pas capable de le faire lui-même.
    • [^] # Re: Virer des fichiers superflus

      Posté par  . Évalué à 1.

      #!/bin/bash
      fonction_pas_recursive()
      {
      rm*.o
      }

      fonction_recursive()
      {
      for nom in `ls` ; do
      # aller dans tous les répertoires mais pas dans les liens symboliques
      if [ -d "$nom" -a ! -L "$nom" ] ; then
      cd "$nom"
      # le premier paramètre (donc $1) de fonction_recursive est le
      # nom de la fonction (ou du script, ou de la commande...) qui doit
      # être exécutée dans chaque répertoire
      $1
      # et, comme fonction_recursive est récursive, elle s'appelle elle-même.
      fonction_recursive $1
      cd ..
      fi
      done
      }

      et tu appelles gentiment "fonction_recursive fonction_pas_recursive" dans ton script

      (PS: desole' pour l'absence d'indentation. Le fait que <pre> bugge sur DLFP est tres amusant a mon gout)
    • [^] # Re: Virer des fichiers superflus

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

      Je me trompe ou c'est exactement le but de cette astuce ? :/

      Pour faire ce que tu dis il suffit de faire :
      find -name "*.o" -exec rm -f {} \;

      Pour exécuter une commande sur tous les répertoires:
      find -type d -exec ./plop {} \;

      etc ....

Suivre le flux des commentaires

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