Chcę wprowadzić następujący folder do terminala:
Milano, Torino (Jan)-Compressed
Jak napisać polecenie, cd
aby wejść do tego katalogu?
Przestrzenie i kilka innych znaków specjalnych, takich jak \
, *
, )
, (
i ?
powodować problemy, gdy próbuję je użyć w wierszu poleceń lub skryptów, na przykład:
$ cd space dir
bash: cd: space: No such file or directory
$ cat space file
cat: space: No such file or directory
cat: file: No such file or directory
$ cat (
bash: syntax error near unexpected token `newline'
$ echo content >\
> ^C
$ ls ?
( ) * ? \
Jak wprowadzić nazwy plików lub katalogów zawierające ogólnie znaki specjalne w terminalu?
command-line
filename
cd-command
Pomario
źródło
źródło
Odpowiedzi:
To polecenie jest dwuznaczne, ponieważ spacje są zwykle używane do oddzielania argumentów. cd nie wie, co chcesz zrobić, ale masz dwie możliwości jego rozwiązania:
Albo „ maskujesz ” spacje (i wszystkie inne znaki specjalne), aby terminal wiedział, że masz na myśli spację jako znak, a nie jako separator:
Lub umieść nazwę folderu lub ścieżkę w cudzysłowie :
źródło
Mała wskazówka: uzupełnianie tabulatorów ;-)
cd Mi
(Lub więcej liter, jeśli to konieczne) i nacisnąć Tab. Terminal pomoże ci, wypełniając pozostałe słowa.Inny sposób: przeciągnij i upuść
cd
najpierw, a następnie przeciągnij i upuść katalog na terminalu i naciśnij enter.źródło
Napisz to jako:
W przeciwnym razie traktuje
Milano,
jako nazwę folderu. Dzieje się tak z powodu spacji w nazwie folderu. Możesz też uciec przed kilkoma znakami specjalnymi:źródło
tl; dr : Aby zacytować znak specjalny, użyj znaku ukośnika odwrotnego
\
lub umieść go w" "
cudzysłowie lub w cudzysłowie' '
. Tab ↹Wypełnienie dba o prawidłowe wycenę.To, o co prosisz, nazywa się cytowaniem :
Cytując postać ucieczki
\
Aby wprowadzić katalog lub plik ze znakiem specjalnym, użyj tego znaku
\
, np .:bash
„s Programowalne Zakończenie (aka Tab ↹realizacji) automatycznie ucieka znaki specjalne z charakterem ewakuacyjnej\
.Cytowanie z podwójnymi cudzysłowami
" "
Aby wprowadzić katalog lub plik ze znakiem specjalnym, należy uciec co najmniej ten drugi lub większą część nazwy pliku lub ścieżki podwójnymi cudzysłowami, np .:
Jako
$
,`
i!
zachować swoje szczególne znaczenie wewnątrz podwójnych cudzysłowów, dopełniania parametrów , komend Zastępstwa , wyrażeń arytmetycznych i Historia rozszerzeń wykonywane są na podwójnych cudzysłowów.Cytowanie z pojedynczymi cytatami
' '
Aby wprowadzić katalog lub plik ze znakiem specjalnym, należy uciec co najmniej ten drugi lub większą część nazwy pliku lub ścieżki podwójnymi cudzysłowami, np .:
Więcej informacji na temat cytowania można znaleźć w
man bash
/ QUOTING , na wiki.bash-hackers.org i na tldp.org .źródło
Ciągi w kształcie litery C i ciąg „$ string”
Między innymi można użyć
$'...'
typu cytowania, aby użyć znaków ukośnika odwrotnego ANSI-C, takich jak\n
i\t
, włączając te, o których wspomniałeś. Z podręcznika bash 4.3:Jest to szczególnie przydatne w przypadku plików zawierających nowe wiersze, tabulatory, gdy piszesz złożone wiersze awk, w których musisz skorzystać z różnych sposobów rozróżniania pojedynczych i podwójnych cudzysłowów, gdy same nazwy plików zawierają miszmasz pojedynczego / podwójnego cudzysłowu itp.
Na przykład tworzenie i wyświetlanie takich plików:
Możesz użyć wartości szesnastkowych znaków, takich jak:
printf
Taki sam pomysł jak poprzednio - wykorzystaj znaki ucieczki:
Użyj i-węzłów:
Każdy plik lub katalog ma specjalną strukturę danych zwaną i-węzłem, do której odnosi się określona liczba dziesiętna. Możesz więc użyć tego do pośredniego zlokalizowania pliku z konkretnym i-węzłem za pomocą
find
polecenia i zrób coś z nim:Unikaj zajmowania się pojedynczymi plikami, gdy możesz używać glob
Kiedy nie musisz zajmować się pojedynczymi plikami, po prostu skorzystaj ze
*
znaku glob w powłoce i cytuj zmienne, przekazując je innym poleceniom. To znacznie ułatwia radzenie sobie z trudnymi nazwami plików:Zwróć uwagę na użycie
./
- zabezpieczenia przed nazwami plików, które mogą zawierać wiodące-
w nich nazwy .źródło
Aby otworzyć folder zawierający spację otaczają go w cudzysłowie, jak
cd "Some Directory"
i ucieczkę z miejsca backslashem, jak:cd /home/kudic/Radna\ površina
.źródło
cd /home/kudic/Radna\ površina
'Radna površina'
), jeśli nie chcesz, aby zmienne środowiskowe ($VARNAME
) były rozwijane i by polecenia były umieszczane w backticksach lub$()
by były uruchamiane (lub jeśli w nazwie pliku występują podwójne cudzysłowy).Jeśli ten katalog znajduje się w folderze domowym, wpisz:
inaczej podaj ścieżkę bezwzględną:
jeśli w nazwie pliku występuje podwójny cudzysłów, użyj tego znaku
\"
źródło
Inną opcją, choć nie najlepszą w tym przypadku, jest użycie symboli wieloznacznych. Możesz spróbować:
cd *Torino*
Najlepiej jest użyć tej metody, gdy w nazwie katalogu znajduje się odrębne słowo lub fraza, które nie są udostępniane innym osobom. Na przykład mam punkty montowania / media / DataSSD i / media / DataHDD. Autouzupełnianie nie działa, dopóki nie wpisuję prawie połowy nazwy, więc aby przejść do partycji HDD, po prostu wpisuję
cd /media/*HD*
źródło