Comment faire un cd dans un répertoire avec ce nom "-2" (commençant par le tiret)?

169

J'ai un répertoire nommé:

-2

Je veux cd dedans mais le cd se plaint:

bash: cd: -2: invalid option

Sans succès, j'ai essayé:

cd "-2"
cd '-2'
cd \-2

Toute solution?

Edit: pas de navigateurs de fichiers comme mc, etc. disponibles sur le serveur.

utilisateur151851
la source
2
Question connexe sur superutilisateur: superuser.com/questions/361573/…
yms

Réponses:

272

Au moins deux façons:

  1. Utilisez l' --argument.

    cd -- -2
    

    Ceci utilise une convention commune aux outils GNU qui consiste à ne pas traiter tout ce qui apparaît après --comme une option de ligne de commande.

    Comme un commentateur l'a noté, cette convention est également définie dans le standard POSIX :

    Comportement par défaut: lorsque cette section est répertoriée comme "Aucune", cela signifie que la mise en œuvre n'a pas besoin de prendre en charge les options. Les utilitaires standard qui n'acceptent pas les options, mais qui acceptent les opérandes, doivent reconnaître "--"le premier argument à ignorer.

    La nécessité de reconnaître "--"est due au fait que les applications conformes ont besoin d'un moyen de protéger leurs opérandes de toute option arbitraire que l'implémentation peut fournir comme extension. Par exemple, si l’utilitaire standard foo est indiqué comme ne prenant aucune option et que l’application doit lui donner un chemin avec un trait d’union, elle peut le faire en toute sécurité de la manière suivante:

    foo -- -myfile
    

    et évitez tout problème avec -m utilisé comme une extension.

    ainsi que :

    Directive 10:
    L'argument --devrait être accepté comme un délimiteur indiquant la fin des options. Tous les arguments suivants doivent être traités comme des opérandes, même s'ils commencent par le '-'caractère. L' --argument ne doit pas être utilisé comme une option ou un opérande.

  2. Spécifiez le chemin explicitement:

    cd ./-2
    

    Ceci spécifie le chemin nommant explicitement le répertoire en cours ( .) comme point de départ.

    cd $(pwd)/-2
    cd /absolute/path/to/-2
    

    Ce sont des variations sur ce qui précède. Un nombre quelconque de telles variations peut être possible; Je vais laisser au lecteur le soin de tout découvrir.

Michael Hampton
la source
23
Ce n’est pas simplement GNU, cela fait partie du standard POSIX. Voir 1.11 Valeurs par défaut pour la description de l'utilitaire et 12.2 Instructions pour la syntaxe de l'utilitaire (règle 10). À partir de la cdpage "L' cdutilitaire doit être conforme à ... la section 12.2".
Dietrich Epp
Maintenant, je suis juste curieux de savoir comment cd dans un répertoire nommé -!
mardi
2
@ergiol De la même manière.
Michael Hampton
1
@ArtB: Non. La citation n'affecte que la division du champ. Donc, "hello world"un argument mais hello worlddeux, et "-2"est le même que -2.
Dietrich Epp
1
@ergiol: Soit cd -- --ou cd ./--devrait fonctionner.
Keith Thompson
49

Cela devrait fonctionner:

cd -- -2 

- signifie pas plus d'option

Tim Haegele
la source
26

Cela fonctionnera si "-2" est dans le répertoire actuel.

    cd ./-2

Vous pouvez compléter automatiquement en tapant - et en appuyant sur la touche de tabulation.

newbee
la source
11

cd /home/...../-2 fonctionne également. Donnez le chemin complet d'accès.

Vivek
la source
7

Pour compléter, si vous souhaitez supprimer / supprimer ce répertoire, vous pouvez utiliser la commande suivante:

rm -r -- -2
Zignd
la source
... et juste pour compléter, je ne ferais jamais ça, plutôt j'utiliserais un outil graphique comme mc ou je renommerai d'abord le répertoire.
Nick
-1

Je sais que cette question a déjà été répondu. Si quelqu'un a une situation comme la mienne, c'est pour lui:

J'ai lancé une application java et je cherchais un répertoire commençant par <path>, je devais le remplacer par un chemin approprié avant de lancer l'application. Cependant, j'ai oublié de le faire. L'application a créé un répertoire appelé <path>.

J'ai essayé cd <path>- m'a donné l'erreur "-bash: erreur de syntaxe près de la nouvelle ligne de jeton inattendue" D'après la suggestion présentée ici (je comprends que c'est pour le répertoire commençant par - et non <) que j'ai essayé cd -- <path>. Cependant, j'ai la même erreur.

Quand j'ai essayé cd \<path>\- cela a fonctionné!

Informations d'arrière-plan:

Les symboles "<" et ">" sont utilisés pour rediriger STDIN et STDOUT, ils doivent donc être échappés pour que le shell ne les interprète pas comme des redirections.

Jobin Thomas
la source