Wiemy, że użycie cd <directory>
spowoduje otwarcie katalogu, jeśli istnieje!
Ponadto cd ..
zabierze nas o jeden poziom wyżej niż bieżący katalog roboczy.
Ale kiedy mamy zagnieżdżony /home/thina/teams/td/tech/app/release/apks
katalog o dłuższej ścieżce , męczące jest po prostu wchodzenie do folderu, apks
a także trudno jest wrócić do innego węzła, powiedz tutaj /home/thina/teams
.
Czy jest jakiś sposób na pominięcie wpisywania cd
i cd ..
? Używam Ubuntu 16.04.
command-line
bash
directory
gsthina
źródło
źródło
cd
icd ..
?cd ../../../../..
CDPATH
zmiennej wbash
dokumentach.Odpowiedzi:
Istnieje
pushd
ipopd
:Spróbuj
help pushd
ihelp popd
więcej opcji. Nie maman
strony, ponieważpushd
ipopd
są wbudowanymi poleceniami bash.źródło
cd -
zrobiłby tego samego?pushd
ipopd
pamiętam więcej niż jedną poprzednią ścieżkę.dirs
podać stosu katalogów w poleceniachpushd
/popd
.help pushd
ihelp popd
wspomniane przez ciebie (jak równieżhelp dirs
), ale pomyślałem, że wspomnę o tym, na wypadek, gdyby ludzie zastanawiali się, skąd pochodzą te polecenia.help pusdh
Oprócz bardzo dobrych już udzielonych odpowiedzi, oto kilka wskazówek na temat
cd
skutecznego korzystania .cd -
zabierze Cię z powrotem do ostatniego katalogu, w którym byłeś.cd ../../..
zabierze Cię na 3 poziomy naraz, możesz użyć..
notacji połączonej razem, aby „przejść w górę” tyle katalogów, ile chcesz.cd ..
, a następnie użyj historii bash, naciskając klawisz strzałki w górę, aby ponownie użyć polecenia.~
aby zastąpić bieżący katalog domowy użytkowników, jeśli jesteś zalogowany jako użytkownik thina,cd ~/teams
zabierze Cię do/home/thina/teams
cd
poleceniu, jeśli wpiszesz część segmentu ścieżki, a następnie Tabsegment ten zostanie zakończony, jeśli nie będzie innego prawidłowego wyboru. Na przykład, jeśli wpiszesz,cd /home/thina/teams/td/t
a następnie naciśniesz Tab, słowo tech zostanie dla Ciebie wypełnione, o ile w katalogu td, który zaczyna się na literę t, nie będzie żadnych innych plików ani katalogów.Korzystanie z tych wskazówek razem może sprawić, że przechodzenie przez katalogi będzie
cd
znacznie mniej bolesne.źródło
~
, szczególnie jeśli jesteś rootem,~user
szybko przeniesie Cię douser
katalogu domowego.Aby wejść na drzewo o kilka poziomów naraz, możesz użyć następującej funkcji (dzięki muru dla ulepszonej wersji):
Następnie możesz zrobić:
Do tego:
up
bez argumentu jest równoznacznecd ..
z tym,${1:-1}
które zastępuje,$1
gdy jest ustawione i w1
inny sposóbcd ..
ma na celu zachowanie zwykłegocd -
zachowania.źródło
-gt
zamiast>
.>
jest leksykograficzny, porównuje się jako ciągi znaków. Ponadto, zamiast budować ścieżkę, dlaczego nie zrobićcd ..
w pętli:for i in $(seq "${1:-1}"); cd ..; done
? To także może wyeliminować tenif
warunek.gt
uwagą, ale odnośnie twojej drugiej sugestii zobacz ostatni punkt w odpowiedzi. Dla mnie to ma sens.OLDPWD
oryginalną ścieżkę. Oto pełna wersja: paste.ubuntu.com/17990874W przypadku długich nazw katalogów użyj zmiennych z pełną ścieżką. Na przykład,
Więc możesz to zrobić
cd "$APKS"
Jeśli chodzi o zwiększenie x liczby katalogów, mam tę funkcję zdefiniowaną w moim
.bashrc
Wrócę
/home/thina/teams
zapks
ciebieOto przykład użycia:
Kolejną małą funkcją, którą wymyśliłem, ale nigdy nie używałem jej tak często, jest
bookmark
funkcja.Oto jak to działa: zapisuje twój bieżący folder w jakimś pliku, a następnie możesz cd do określonego katalogu na podstawie numeru wiersza w tym pliku. Przykład:
A oto sama funkcja:
źródło
UPDATE: Jest jeszcze bardziej skutecznym narzędziem niż
autojump
:fasd
, ale nie jestem z nim zapoznać.Dziwi mnie, że nikt jeszcze o tym
autojump
nie wspominałZasadniczo jest to, co zbudował @graipher, z kilkoma dodatkowymi opcjami.
Jak wspomniałem w innym pytaniu:
Po kilkukrotnym przejściu do katalogu (nawet raz):
cd /home/thina/teams/td/tech/app/release/apks
możesz użyć skrótu,
j
aby szybko się tam przenieść, niezależnie od tego, w którym katalogu aktualnie się znajdujesz:j apks
Pamiętaj, że korzystanie z dowolnej części ścieżki działa, o ile jest najwyższa na liście:
j app
zabierze Cię również,.../apks
jeśli byłeś tam więcej razy niż do.../app
.Poleciłbym go zamiast posiadania własnego skryptu, ponieważ jest dobrze utrzymany, dystrybuowany dla Ubuntu i ma inne fajne funkcje, takie jak przeskocz do dziecka :
Został przeniesiony do
apks
wtd
, raczej niż niektóre inneapks
pod innym drzewie.źródło
Skróty
Mam listę często używanych katalogów dostępnych bezpośrednio za pośrednictwem aliasu. Obejmuje to również skróty do katalogów w górę hierarchii.
Teraz, gdy chcę przejść trzy poziomy wyżej, po prostu piszę
....<Enter>
i już jestem!źródło
Włącz
autocd
opcję (shopt -s autocd
), abyś nie musiał pisaćcd
. Na przykład potrzebujesz tylko dwuznakowej komendy,..
aby przejść do katalogu nadrzędnego.Jeśli nawigujesz między dwoma katalogami, możesz przełączać się między nimi
cd -
, co prowadzi do poprzedniego katalogu roboczego.autocd
Opcja nie robi-
biegcd -
ale można zdefiniować alias lub funkcję do tego.Możesz zapamiętać katalogi na stosie z wbudowanymi
pushd
ipopd
. Wbudowanydirs
wyświetla stos katalogów (uważam, że jestdirs -v
bardziej czytelny).Jeśli często przechodzisz do podkatalogów określonego katalogu, a podkatalogi te mają raczej unikalną nazwę, dodaj je do
CDPATH
zmiennej. Ostrzegam jednak, że nigdy nie znalazłem takiej sytuacji, w której byłbyCDPATH
przydatny.Możesz ustawić zmienną na nazwę katalogu, a następnie zmienić na nią za pomocą
$foo
.Zsh ma kilka fajnych funkcji, których bash nie ma. Niektóre z nich można emulować, pisząc funkcje wykonujące tę samą pracę. W szczególności dwuargumentowa forma
cd
pozwala wygodnie przejść do innego katalogu o podobnej nazwie, np. Z/home/thina/teams/td/tech/app/release/apks/com.acme/v1
, biegniecd release beta
do/home/thina/teams/td/tech/app/beta/apks/com.acme/v1
.źródło
Jak już odpowiedziałem na powiązane pytanie dotyczące UnixSE, używam do tego skryptu o nazwie z [github] .
Zapamiętuje katalogi, do których przechodzisz, porządkuje je według frecency (częstotliwość + aktualność) i pozwala na przejście do jednej z zapamiętanych ścieżek przy użyciu części jej nazwy.
Po co najmniej raz cd'ed do katalogu możesz zrobić np. Zamiast:
Po prostu zrób:
który będzie działał, wykorzystując częściowe dopasowanie nazw (zakładając, że nie masz innego katalogu zawierającego w ścieżce termin sub i który ma większą frecency).
Zdefiniowałem też taką funkcję, która najpierw próbuje normalnej płyty CD, a jeśli to się nie powiedzie, używa z:
To daje najlepsze z obu. Jeśli folder znajduje się w bieżącym katalogu lub podano prawidłową pełną ścieżkę, po prostu tam będzie cd, ale jeśli nie, spróbuje znaleźć dopasowanie w bazie danych i tam cd. To eliminuje (mały) ból związany z czasem konieczności korzystania z cd (do trenowania bazy danych, przechodzenia do folderu, w którym nigdy nie byłeś) i czasem zapominania o używaniu z, jeśli dotyczy.
źródło
cd
nie przeszkadza wz
tworzeniu bazy danych często odwiedzanych katalogów?autojump
?Trzy kolejne opcje, które uważam za dobrze działające (choć mogę w przyszłości z nich skorzystać)
pushd
mogę więcej ich , dopiero się o tym dowiedziałem):Ułóż ścieżki tak, aby nie trzeba było
cd
zagłębiać się w głęboko zagnieżdżone katalogi, a raczej: miejsca, które musisz często odwiedzać, są na wyciągnięcie ręki. Można to osiągnąć za pomocą dowiązań symbolicznych : zachowaj wyraźne, dobrze zhierarchizowane katalogi takie, jakie są, ale utwórz łącze szybkiego dostępu dla własnej wygody.Następnie zamiast wpisywać długą ścieżkę
cd
, po prostu użyjcd ~/apks
icd ../teams
(lub, w tym przykładzie preferowane,~/teams
), aby wrócić.Nie używaj jednej powłoki i płyty CD w obie strony między ścieżkami, ale utrzymuj jedną powłokę działającą dla każdej ścieżki, w której chcesz pracować. Istnieje wiele poziomów, na których można osiągnąć tę wielozadaniowość:
tmux
.Po prostu uruchom akcję w poleceniu jednego celu, które znajduje
cd
się w folderze, robi jedną rzecz i natychmiast przywraca kontrolę nad oryginalnym folderem: zamiastpo prostu zrób jedną linijkę
lub równoważnie
Nie robić
cd
w ogóle , ale po prostu wykonywać prawo polecenia z katalogu domowym. Rozszerzenia nawiasów klamrowych mogą tutaj bardzo pomóc: zamiastmożesz to zrobić
źródło
pushd
jest bardzo, bardzo przydatne. Możesz dodać więcej informacji o tym, jak z niego skorzystać, aby poprawić swoją odpowiedź.Pushd and Popd
Polecenia
pushd
ipopd
są moimi ulubionymi.pushd
Polecenie zapamięta odwiedzonych katalogów jest odczytywany za pomocą poleceniadirs
, a kiedy jesteś gotowy, aby przejść do tyłu korzystaniapopd
do powrotu.Oto przykład użycia funkcji i aliasów bash:
Ciągle używam kombinacji tych poleceń na różne sposoby.
Skróty
Inną opcją dla często używanych katalogów jest po prostu alias polecenia
cd
lubpushd
. Korzystając z przykładów z Twojego postu:Połączenie
Połącz te dwa pomysły, a możesz nawet mieć to:
Co daje dużą elastyczność w przeglądaniu katalogów. I zachować
cd***
isd***
aliasy na rękę na takie rzeczy jakDesktop
,Documents
,Music
,Downloads
, itd. I jest to bardzo wygodne!źródło
Wypróbuj z.lua - nowe polecenie cd, które pomaga szybciej nawigować, ucząc się nawyków.
cd do katalogu zawiera foo:
cd do katalogu kończy się na foo:
użyj wielu argumentów:
Zakładając następującą bazę danych:
"z in"
pojawi się/home/user/mail/inbox
jako pozycja ważona o wyższej wartości. Możesz jednak przekazać wiele argumentów do z.lua, aby wybrać inny wpis. W powyższym przykładzie"z w in"
zmieniłbym katalog na/home/user/work/inbox
.cd z interaktywnym wyborem:
Gdy znaleziono wiele dopasowań, użycie
z -i
spowoduje wyświetlenie listy:Następnie możesz wprowadzić numer i wybrać miejsce, w którym chcesz się udać przed faktycznym cd. na przykład. wprowadź 3 do cd do
/home/data/software
. A jeśli po prostu naciśniesz ENTER i nic nie wprowadzisz, po prostu wyjdzie i pozostanie tam, gdzie byłeś.z.lua
obsługuje równieżfzf
interaktywny wybór lub uzupełnianie argumentów:zakończenie z fzf
szybko wróć do rodzica bez pisania
cd ../../..
:Nowa opcja
"-b"
może szybko wrócić do określonego katalogu nadrzędnego w bash zamiast zamiast nadmiarowego wpisywania „cd ../../ ..”:(Bez argumentu) :
cd
w katalogu głównym projektu, w katalogu głównym projektu znajduje się najbliższy katalog nadrzędny z.git
/.hg
/.svn
w nim.(Jeden argument) :
cd
do najbliższego rodzica zaczynającego się od słowa kluczowego, jeśli nie można znaleźć, przejdź do rodzica zawierającego słowo kluczowe.(Dwa argumenty) : zamień pierwszą wartość na drugą (w bieżącej ścieżce).
...
Zacznijmy od aliasu
z -b
dozb
:Chciałbym, żeby pasowało do twoich potrzeb.
źródło
ryba ma kilka fajnych udogodnień do szybkiego poruszania się.
Ponadto trzymam moje ulubione katalogi symlinkowane do ~ / f, więc mogę cd ~ / f / x, aby dostać się do ~ / foo / bar / baz / experimental-data.
źródło
Od dawna używam aliasów dla często używanych katalogów.
Mam również funkcję bash o nazwie ccb (skrót od tworzenia pliku nietoperzy cd - ten pochodzi z dos / windows, gdzie skrypt powłoki .bat ccb.bat utworzyłby inny plik .bat do przejścia do bieżącego katalogu), który tworzy / dołącza aliasy (w pliku .bash_aliases) do bieżącego katalogu.
np .: $ ccb myfav utworzy alias do bieżącego katalogu z aliasem myfav w pliku .bash_aliases i źródłowy plik .bashrc, aby alias był natychmiast dostępny.
Właśnie znalazłem nowe rozwiązanie. To funkcja bash
nie trzeba się niczego uczyć z poprzedniego użycia. Problem, który może nie zostać rozwiązany, to: jeśli w drzewie podkatalogów znajduje się więcej niż 1 katalog o nazwie „nazwa_katalogu_głębnie”, nastąpi przejście do pierwszego katalogu znalezionego przez find.
Ponadto to rozwiązanie nie będzie w stanie przejść do innego drzewa katalogów.
między zakodowanymi na stałe aliasami i wygenerowanymi aliasami a tą nową funkcją lj (), większość moich potrzeb jest zaspokojona.
Oto funkcja bash my ccb () dla każdego, kto chce z niej korzystać
źródło