Jak przejść do katalogu o nazwie zawierającej spacje w bash?

84

próbowałem cd "~/Library/Application Support/" -bash: cd: ~/Library/Application Support/: No such file or directory

również cd ~/Library/Application Support/ -bash: cd: ~/Library/Application Support/: No such file or directory

colinfang
źródło

Odpowiedzi:

113

Możesz użyć Tabklawisza po naciśnięciu kilku pierwszych znaków (spowoduje to „wypełnienie” pozostałej części folderu, np. Wpisz cd ~/LTabwypełnienie, cd ~/Library/a następnie wpisz ApTabresztę.

Jeśli między słowami jest spacja i nie chcesz używać powyższych metod, wstaw \przed nimi spację (odwrotny ukośnik), np cd ~/Library/Application\ Support.

robzolkos
źródło
Czy w ścieżce rozróżniana jest wielkość liter, czy nie? Mogę uzyskać dostęp do biblioteki za pomocą cd ~ / library, ale metoda tab nie będzie działać, jeśli źle się rozłożę.
colinfang
@colinfang OS X nie rozróżnia wielkości liter, ale zachowuje wielkość liter. Powłoka bash musi być nieco bardziej dyskryminująca, jeśli chodzi o autouzupełnianie.
NReilingh
@NReilingh - Aha, thx.
colinfang
1
@colinfang: Możesz używać shopt -s nocaseglobi bind 'set completion-ignore-case on'aby bash był mniej wrażliwy na wielkość liter.
Chris Johnsen
2
colinfang - Aby uzupełnić tabulację bez rozróżniania wielkości liter z kompatybilnością bash, spróbuj „zsh”. Również uzupełnianie tego znaku wieloznacznego tej powłoki jest bardzo dobre.
Ɱark Ƭ
27

Podstawowym problemem jest to, w jaki sposób powłoka ( bash ) robi cytowanie i jak wpływa to na rozwinięcie tyldy i podział na „słowa” (argumenty dla uruchamianego programu).

bash traktuje wiodącą tyldę specjalnie, jeśli nie jest cytowana. Ponadto nie wolno cytować następującego ukośnika.

Jednocześnie bash analizuje wiersze poleceń na „słowa” na podstawie niecytowanych białych znaków. cdKomenda wymaga zazwyczaj dokładnie jeden argument (katalog docelowy). Wiersz polecenia cd foo baroznacza sposób uruchamiania cdz dwoma argumentami: fooi bar. Jeśli chcesz wysłać tylko jeden foo barargument, musisz zacytować spację:
(np.) cd foo\ bar(Zobacz więcej cytowania poniżej).

W twojej konkretnej sytuacji musisz pozostawić cudzysłowy i następujący ukośnik bez cudzysłowu, cytując miejsce w nazwie katalogu. Twoja cd "~/Library/Application Support/"próba kończy się na cytowaniu za dużo (tylda i jej ukośnik), podczas gdy twoja cd ~/Library/Application Support/próba podaje za mało (pomija cytowanie miejsca w nazwie katalogu).

Najczęstszym rozwiązaniem jest użycie znaku jednokierunkowego do cytowania tylko miejsca:

    cd ~/Library/Application\ Support

Możesz także użyć pojedynczych lub podwójnych cudzysłowów wokół spacji lub spacji oraz innych bitów tego argumentu (ale nie ~/!):

    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

Tego rodzaju cytaty mają różne znaczenia, ale w tych przykładach są identyczne. Pojedyncze cudzysłowy chronią dosłowne ciągi znaków, podczas gdy podwójne cudzysłowy umożliwiają różne rozszerzenia i podstawienia w cytowanym regionie.

Często możesz po prostu pozwolić powłoce wykonać za ciebie pracę.

  • Globbing (symbole wieloznaczne):

    cd ~/L*/Ap*

    Możesz użyć, shopt -s nocaseglobaby globbing nie rozróżniał wielkości liter:

    cd ~/l*/ap*
  • Ukończenie:

    Naciśnięcie Tabpo wejściu cd ~/Lprawdopodobnie rozwinie go do cd ~/Library/. Ponowne
    naciśnięcie Tabpo wejściu Ap(już masz cd ~/Library/Ap) prawdopodobnie rozwinie go do cd ~/Library/Application\ Support/(powłoka automatycznie wstawia uciekający ukośnik).

    Możesz użyć, bind 'set completion-ignore-case on'aby rozróżnić wielkość liter w zakończeniu:

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

Chris Johnsen
źródło
niezła odpowiedź @Chris. Jak sprawiłeś, by znaki Tab wyglądały jak klucze?
robzolkos
4
@RobZ: Jest to <kbd></kbd>tag HTML (jeden z kilku tagów HTML obsługiwanych w znacznikach SE ).
Chris Johnsen
9

Kiedy podwójnie zacytujesz ścieżkę, powstrzymujesz ekspansję tyldy. Jest więc kilka sposobów, aby to zrobić:

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

Tylda nie jest tutaj cytowana, więc rozszerzenie tyldy będzie nadal uruchamiane.

cd "$HOME/My Code"

Można rozszerzać zmienne środowiskowe w ciągach cudzysłowów; to jest właśnie to, co robi rozszerzenie tylda

cd ~/My\ Code

Możesz także uciec od znaków specjalnych (takich jak spacja) za pomocą odwrotnego ukośnika.

samodzielny
źródło
9

Możesz też po prostu przeciągnąć folder do okna Terminal, pełna ścieżka pliku / folderu zostanie automatycznie wklejona podczas przeciągania.

Psychic2k
źródło
4

Musisz uciec z miejsca w „ Application Support

Próbować $ cd ~/Library/Application\ Support/

NReilingh
źródło
0

Jeśli normalne sposoby nie działają, spróbuj zastąpić spacje %20.

Działa to dla mnie w przypadku SSH i innych poleceń w stylu domeny, takich jak auto_smb.

atwixtor
źródło
0

Możesz wypróbować to w przypadku folderów / plików z odstępami, jeśli plik lub nazwa folderu zawiera 1) nazwa pliku. Rozszerzenie, polecenie powinno brzmieć cd ~ / plik \ nazwa.rozszerzenie / (lub) cd ~ / "nazwa pliku. Rozszerzenie" /

prasanth sivanesan
źródło
1
W jaki sposób ta odpowiedź różni się lub poprawia w stosunku do innych podobnych odpowiedzi?
fsb
Jest to idealna składnia terminalu do definiowania przestrzeni i podawania cudzysłowów. Jest to jedna ze zdefiniowanych przez użytkownika, a także użycie klawisza Tab nie przyjmuje nazwy takiej jak 1) nazwa_pliku.ext 2) nazwa pliku.ext Podczas naciskania tabu dla tego typu nazwy auto uzupełnianie słów jest wyświetlane aż do „pliku” w tym czasie możemy użyć tego ukośnika odwrotnego do zdefiniowania miejsca w terminalu. @fsp
prasanth sivanesan
Wszystkie te informacje powinny znajdować się w odpowiedzi, aby pokazać czytelnikom, jak różni się od 9 innych odpowiedzi, w tym od przyjętej odpowiedzi.
fsb