Comment cd dans un répertoire avec un nom contenant des espaces dans bash?

84

j'ai essayé cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

aussi cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

colinfang
la source

Réponses:

113

Vous pouvez utiliser la Tabtouche après avoir appuyé sur les premiers caractères (ceci "remplira" ensuite le reste du dossier pour vous, par exemple tapez cd ~/LTabremplit cd ~/Library/puis tapez ApTabet remplira le reste pour vous.

S'il y a un espace entre les mots et que vous ne voulez pas utiliser les méthodes ci-dessus, mettez une \barre oblique inverse avant l'espace, par exemple cd ~/Library/Application\ Support.

robzolkos
la source
Le chemin est-il sensible à la casse ou insensible? Je peux accéder à Library par cd ~ / library, mais la méthode de tabulation ne fonctionnera pas si je me trompe.
Colinfang
@colinfang OS X ne respecte pas la casse, mais conserve la casse. Le shell bash doit être un peu plus discriminant en ce qui concerne la complétion automatique.
NReilingh
@NeReilingh - Aha, thx.
Colinfang
1
@colinfang: Vous pouvez utiliser shopt -s nocaseglobet bind 'set completion-ignore-case on'rendre bash moins sensible aux cas.
Chris Johnsen
2
colinfang - Pour une complétion d'onglet insensible à la casse avec une compatibilité bash, essayez 'zsh'. De plus, la fin générique de cette coquille est très bonne.
Mars
27

La question centrale ici est de savoir comment le shell ( bash ) cite et comment cela affecte le développement du tilde et la scission en «mots» (arguments du programme en cours d'exécution).

bash ne traite le tilde qui précède que s'il n'est pas cité. De plus, la barre oblique suivante ne doit pas non plus être citée.

Dans le même temps, bash analyse les lignes de commande en «mots» basés sur des espaces non cités. La cdcommande nécessite généralement un seul argument (le répertoire de destination). Une ligne de commande similaire à un cd foo barmoyen de s'exécuter cdavec deux arguments: fooet bar. Si vous ne voulez envoyer qu'un seul foo barargument, vous devez citer l'espace:
(par exemple) cd foo\ bar(voir plus d'exemples de citations ci-dessous).

Dans votre situation particulière, vous devez laisser le tilde et la barre oblique suivante sans guillemets tout en citant l'espace dans le nom du répertoire. Votre cd "~/Library/Application Support/"essai finit par citer trop (le tilde et sa barre oblique), tandis que votre cd ~/Library/Application Support/essai cite trop peu (il omet de citer l'espace dans le nom du répertoire).

La solution la plus courante consiste à utiliser l'échappement à un seul caractère pour ne citer que l'espace:

    cd ~/Library/Application\ Support

Vous pouvez également utiliser des guillemets simples ou doubles entre les espaces ou l'espace et quelques autres bits de cet argument (mais pas le ~/!):

    cd ~/Library/Application' 'Support
    cd ~/Library/Application" "Support
    cd ~/Library/App'lication 'Support
    cd ~/Library/Application" Supp"ort
    cd ~/'Library/Application 'Support
    cd ~/"Library/Application "Support

Ces types de citations ont des significations différentes, mais elles sont identiques dans ces exemples. Les guillemets simples protègent les chaînes littérales tandis que les guillemets doubles permettent diverses extensions et substitutions dans la région citée.

Souvent, vous pouvez simplement laisser la coque faire le travail à votre place.

  • Globbing (caractères génériques):

    cd ~/L*/Ap*

    Vous pouvez utiliser shopt -s nocaseglobpour rendre la casse insensible à la casse:

    cd ~/l*/ap*
  • Achèvement:

    En appuyant sur Tabaprès avoir entré cd ~/Lsera probablement élargir à cd ~/Library/.
    Si vous appuyez à Tabnouveau après avoir entré Ap(vous avez maintenant cd ~/Library/Ap), cela sera probablement étendu à cd ~/Library/Application\ Support/(le shell a automatiquement inséré la barre oblique inversée qui s’échappe).

    Vous pouvez utiliser bind 'set completion-ignore-case on'pour rendre la complétion insensible à la casse:

    cd ~/l Tabcd ~/Library/; ap Tabcd ~/Library/Application\ Support/

Chris Johnsen
la source
belle réponse @Chris. Comment avez-vous obtenu que les caractères de tabulation ressemblent à des clés?
robzolkos
4
@RobZ: Il s'agit de la <kbd></kbd>balise HTML (une des balises HTML prises en charge dans SE Markdown ).
Chris Johnsen
9

Lorsque vous double-citez un chemin, vous arrêtez le développement du tilde. Donc, il y a plusieurs façons de le faire:

cd ~/"My Code"
cd ~/'My Code'

Le tilde n'est pas cité ici, donc l'expansion du tilde sera toujours exécutée.

cd "$HOME/My Code"

Vous pouvez développer les variables d'environnement dans des chaînes entre guillemets; c'est essentiellement ce que l'expansion tilde fait

cd ~/My\ Code

Vous pouvez également échapper des caractères spéciaux (tels que l'espace) avec une barre oblique inverse.

utilisateur
la source
9

Vous pouvez aussi simplement faire glisser un dossier dans la fenêtre du terminal, le chemin d'accès complet au fichier / dossier sera automatiquement collé par glisser.

Psychic2k
la source
4

Vous devez échapper à l'espace " Application Support"

Essayer $ cd ~/Library/Application\ Support/

NRiling
la source
0

Si les méthodes habituelles ne fonctionnent pas, essayez de remplacer les espaces par %20.

Cela a fonctionné pour moi lorsqu'il s'agit de SSH et d'autres commandes de type domaine, telles que auto_smb.

Atwixtor
la source
0

Si le nom du fichier ou du dossier contient 1) nom de fichier.extension, la commande doit être cd ~ / fichier \ nom.extension / (ou) cd ~ / "nom de fichier.extension" /

prasanth sivanesan
la source
1
Comment cette réponse diffère-t-elle ou améliore-t-elle les réponses similaires?
fsb
Sa syntaxe de terminal parfaite pour définir l’espace et donner des guillemets est l’un de ceux définis par l’utilisateur; utiliser également la touche de tabulation ne prend pas le nom suivant: 1) nomfichier.ext 2) nom de fichier.ext Lorsque vous appuyez sur tab pour ce type de la complétion des mots est affichée jusqu’à "fichier" à ce moment, nous pouvons utiliser cette barre oblique inverse pour définir l’espace dans le terminal. @fsp
prasanth sivanesan Le
Toutes ces informations doivent figurer dans la réponse pour montrer aux lecteurs en quoi elles diffèrent des 9 autres réponses, y compris la réponse acceptée.
FSB le