• # l' "option" --

    Posté par  . Évalué à 2.

    Cette option sert plus généralement a ignorer ce qui suit sur la ligne de commande. Il devient donc possible d'éffacer un fichier nomé -rf avec :
    rm -- -rf
    et pour supprier un fichier nomé .* :
    on encadre le nom du fichier avec "" (pour que les caractéres spéciaux ne soient pas interprétés)
    rm ".*"
    • [^] # quotes

      Posté par  . Évalué à 1.

      Ce serait pas pluôt des simples quotes (apostrophes)?

      Ecrire ".*" dans un shell sera transformé en la liste des fichiers commencant par .
      Ecrire '.*' ne pas interprété d'aucune façon.
      • [^] # Re: quotes

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

        > Ecrire ".*" dans un shell sera transformé en la liste des fichiers commencant par .
        > Ecrire '.*' ne pas interprété d'aucune façon.

        même pas vrai!

        regarde plutôt ça:
        -{ploki@jesus:~}-
        $ A=coucou
        -{ploki@jesus:~}-
        $ echo $A *
        coucou Desktop Documents GNUstep Nautilus nsmail
        -{ploki@jesus:~}-
        $ echo "$A *"
        coucou *
        -{ploki@jesus:~}-
        $ echo '$A *'
        $A *
        -{ploki@jesus:~}-
        $
        • [^] # Re: quotes

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

          Tu es dans l'erreur. Tes exmples ne montrent pas ce que tu affirmes. Essayes ceci : $ echo "Desk*" Desktop $echo 'Desk*' Desk* $

          Mainteneur de LiquidPrompt - https://github.com/nojhan/liquidprompt

          • [^] # Re: quotes

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

            Bien sûr monsieur le gourou qui fait pas des vrais
            screenshots pour prouver ce qu'il dit...
            t'as qu'à faire
            $ man bash
          • [^] # Re: quotes

            Posté par  . Évalué à 1.

            Ici j'ai plutôt ça :

            ~ $bash --version
            GNU bash, version 2.05a.0(1)-release (powerpc-ibm-aix4.3)
            Copyright 2001 Free Software Foundation, Inc.
            ~ $echo "prog/*"
            prog/*
            ~ $echo 'prog/*'
            prog/*
            ~ $echo prog/*
            prog/algo2 prog/bd prog/c prog/fvwm prog/irc prog/java prog/nedit_macros prog/projet_compil prog/rezo prog/systeme

            donc je ne sais quoi conclure.
    • [^] # Re: l'

      Posté par  . Évalué à 1.

      > Cette option sert plus généralement a ignorer ce qui suit sur la ligne de commande

      C'est plutôt pour indiquer que le paramètre suivant commançant pas un '-' n'est pas une option. Sinon, pour ignorer ce qui suit sur la ligne de commande c'est le caractère '#' .
      "--" marche avec toute les commandes gnu. Exemple : pour voir s'il y a "-i" dans le fichier toto.txt
      $ grep -- -i toto.txt

      et
      $ grep -- -i toto.txt # super cette commande

      marche de la même façon.
      • [^] # Re: l'

        Posté par  . Évalué à 1.

        Plus exactement c'est pour demander au getopt() d'arreter de jouer avec argv. Donc tout ce qui suit un « -- » (et pas seulent le prochain flag) est considéré par le programme comme faisant partie de ce qu'on appelle parfois les « non-option arguments ». Et ca marche avec tout ce qui utilise getopt(), gnu ou pas.
  • # Autre méthode...

    Posté par  . Évalué à 1.

    On peut assi faire rm ./-machin
    • [^] # Re: Autre méthode...

      Posté par  . Évalué à 1.

      une autre méthode moins efficace, mais certainement plus sure:
      ls -i pour avoir l'i-node du fichier à effacer; puis find . -inum inode -exec rm {} \;

      Au fait, touch toto -t ne crée pas de fichier sur toutes les plateforme. Sur Cygwin et linux, touch se plaint qu'il ne connait pas l'option -t. Par contre sur Solaris, la commande fonctionne et crée le fichier -t.
      • [^] # Re: Autre méthode...

        Posté par  . Évalué à 1.

        Sous linux ? C'est vague comme description.

        Moi, avec GNU/Linux, j'ai

        « Mettre à jour les dates d'accès et de modification de chaque FICHIER
        selon la date courante.
        Les arguments obligatoires pour les options de formes longues le sont aussi
        pour les options de formes courtes.
        -a modifier seulement la date d'accès
        -c, --no-create ne créer aucun fichier
        -d, --date=CHAÎNE analyser la CHAÎNE et l'utiliser au lieu
        de la date courante
        -f (ignorée)
        -m modifier seulement la date de modification
        -r, --file=FICHIER utiliser la date du FICHIER comme référence
        au lieu de la date courante
        -t DATE utiliser la DATE selon le format:
        [[CC]AA]MMJJhhmm[.ss]
        comme tampon date-heure au lieu de la date courante
        --time=CODE -a pour « atime », -m pour « mtime », -m pour modifié,
        -a pour utilisé
        --help afficher l'aide-mémoire
        --version afficher le nom et la version du logiciel

        Noter que les options -d et -t acceptent différents formats de date et d'heure.

        Rapporter toutes anomalies à <bug-coreutils@gnu.org>. »

        Donc une option -t, avec GNU coreutils.
        Mais bien entendu, tu parlais de « linux », et donc il n'est pas certain que tu parlais du touch de GNU.
        • [^] # Re: Autre méthode...

          Posté par  . Évalué à 1.

          voici ce que j'obtiens comme info sur mon "touch"
          >touch --version
          touch (GNU fileutils) 4.0.36
          Writen by Paul Rubin, Arnold Robbins, Jim Kingdon, David MacKenzie, and Randy.
          ...
          >
          Ce que je voulais dire c'est que sur certaines plateformes on va creer le fichier -t . Auquel cas l'astuce proposée est valable. Sur d'autre plateforme plus intelligente, touch va d'abord faire une verification de ses arguments et ne va pas laisser passer le fait que si on lui donne une option apres le nom d'un fichier ca ne correspond pas a l'utilisation normale de la commande.
      • [^] # Re: Autre méthode...

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

        Plus sure ?

        Essaie la commande

        find . -inum inode -exec echo {} \;

        pour te convaincre que ta ligne de commande a base de find execute exactement la meme chose que rm ./-toto.
        • [^] # Re: Autre méthode...

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

          La remarque de Damien était pertinente. En effet, le but est d'éviter l'interprétation des caractères spéciaux par le shell. Exemple : $ echo / > '`rm -Rf $HOME`' $ ls `rm -Rf $HOME` À ton avis, que se passera-t-il (n'essaye pas) si tu tapes : $ rm `rm -Rf $HOME` Pour effacer ce fichier, il faudra que tu utilises une autre astuce que rm ./`rm -Rf $HOME` pour contrecarrer les caractères spéciaux présents dans le nom. Et dans ce cas, l'astuce de Damien évite tout effet de bord, car find ne passe pas par un sous-shell pour lancer l'exécution de rm.

          Mainteneur de LiquidPrompt - https://github.com/nojhan/liquidprompt

          • [^] # Re: Autre méthode...

            Posté par  . Évalué à 1.

            Je déconseille vivement le coup du find pour la raison suivante : si plusieurs filesystems sont montés sous le répertoire sur lequel tu lance le find, ça va effacer tous les fichiers qui ont ce numéro d'inode sur tous les devices montés sous ce répertoire. A moins d'utiliser l'option -xdev (ou -mount) de find.

            Le but était de faire plus sûr, mais pour le coup la solution est plutôt pire que le problème...
  • # Re: effacer -machin

    Posté par  . Évalué à 1.

    Petit ajout a cette note :)

    Exemple :
    /home/toto
    /home/~toto

    cd /home
    il ne faut pas faire rm -rf ~toto, sinon vous supprimer le répertoire de l'utilisateur toto (/home/toto).
    mais bien rm -rf "~toto" ou le chemin complet /home/~toto :)

    @+ Whoo
  • # Re: effacer -machin

    Posté par  . Évalué à 1.

    tient tient,
    nous voyons donc ici : (d'après les posts)
    soit la non-complétude des normes UNIX
    soit le non respet de ces normes.

    reste à déterminer la cible et : jetez les pierres !


    http://www.unix.org/single_unix_specification/(...)

    Single-Quotes
    Enclosing characters in single-quotes ( '' ) shall preserve the literal value of each character within the single-quotes. A single-quote cannot occur within single-quotes.

    Double-Quotes
    Enclosing characters in double-quotes ( "" ) shall preserve the literal value of all characters within the double-quotes, with the exception of the characters dollar sign, backquote, and backslash, as follows:

    l'étoile devrait être donc préservée dans la double quote.
  • # Ouai ben moi...

    Posté par  . Évalué à 2.

    Avant de connaître les subtilités du
    rm ./-i et autre, j'utilisais un bête
    gestionnaire de fichier.

    Clic le fichier, paf le fichier.
  • # unlink

    Posté par  . Évalué à 1.

    Sous unix en général, la commande pour supprimer un fichier d'un répertoire, c'est unlink : comme il ne prend pas d'options, la question est réglée :

    unlink '-Rf'

    etc.

    En revanche, sous Linux en particulier, la commande ne fonctionne pas pour les répertoires (il faut utiliser rmdir).

Suivre le flux des commentaires

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