Jak mogę utworzyć katalog i zmienić katalog roboczy na nowy?

18

Szukam sposobu na utworzenie katalogu i zmianę mojego obecnego katalogu roboczego na nowo utworzony katalog za pomocą jednego polecenia. W jaki sposób mogę to zrobić?

tj. Zamiast robić

user@Computer:~$ mkdir NewDirectory
user@Computer:~$ cd NewDirectory
user@Computer:~/NewDirectory$ 

chcę zrobić

user@computer:~$ **command** NewDirectory
user@Computer:~/NewDirectory$

Jakie może być polecenie ?

TheKojuEffect
źródło

Odpowiedzi:

27

Jeśli naprawdę chcesz, aby była to tylko jedna komenda, sugeruję dodanie czegoś takiego .bashrc:

md () { mkdir -p "$@" && cd "$1"; }

Wpisanie md foow wierszu poleceń spowoduje utworzenie katalogu o nazwie fooi cdnatychmiast po nim. Pamiętaj, że będziesz musiał ponownie załadować swoje, .bashrcaby zmiany odniosły skutek (tj. Otworzyć nową konsolę lub uruchomić source ~/.bashrc).

Por. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time również dla możliwych alternatyw.

Michael Biech
źródło
19

mkdir "NewDirectory" && cd "NewDirectory"

  • Część za &&wykona się tylko wtedy, gdy pierwsze polecenie się powiedzie.
  • Nazywa się to listą poleceń podręczniku Bash .
  • Istnieje również wersja skrócona:

    mkdir "NewDirectory" && cd "$_"
    
  • Przykład z wiersza poleceń:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (edytuj) Dodaj ”do poleceń, ponieważ katalog może zawierać spację.

Rinzwind
źródło
mkdir "NewDir" && cd "$_"działa świetnie niż mkdir "NewDir" && cd "NewDir"nie działa automatyczne uzupełnianie. BTW co to jest „$ _”?
TheKojuEffect 30.01.2013
Co więcej, byłoby całkiem przydatne, gdybyśmy mogli podłączyć przełącznik, mkdiraby przejść do utworzonego nowego katalogu.
TheKojuEffect
@TheKojuEffect $ _ patrz gnu.org/software/bash/manual/bashref.html#Lists Odnośnie tego ostatniego: nikt nie powstrzymuje cię przed użyciem aliasu lub funkcji w środku .bashrc;)
Rinzwind 30.01.2013
7

Nie ma do tego wbudowanej funkcji, ale możesz użyć funkcji powłoki, aby nie musieć ponownie wpisywać argumentu cdpolecenia po uruchomieniu mkdir:

  • Wpisz cd , a następnie Esc .(lub Alt+. ), aby wstawić ostatni argument z poprzedniego polecenia.
  • cd !$wykonuje cdsię na ostatnim argumencie poprzedniego polecenia.
  • Naciśnij, Upaby przywołać poprzednią linię poleceń, a następnie edytuj ją, aby zmienić mkdirna cd.

Możesz zdefiniować prostą funkcję make-and-change-directory w ~/.bashrc:

mkcd () { mkdir "$1" && cd "$1"; }

Załaduj ponownie .bashrc( . ~/.bashrc) lub uruchom ponownie bash, a teraz możesz pisać mkcd new-directory.

Ta prosta wersja zawiesza się w niektórych nietypowych przypadkach obejmujących dziwne nazwy katalogów lub ..dowiązania symboliczne. Oto jeden, który ma. Aby uzyskać wyjaśnienia, zobacz wersję tego pytania dla systemów Unix i Linux .

mkcd () {
  case "$1" in
    /*) mkdir -p "$1" && cd "$1";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "$1";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "$1";;
    *) mkdir -p "./$1" && cd "./$1";;
  esac
}
Gilles „SO- przestań być zły”
źródło
Moje +1 jest specjalnie dla specyficznych dla Basha odniesień do argumentów ostatniego polecenia.
0xC0000022L
+1 za nadmiar inżynierii. Wełna drzewna! :)
mhvelplund
3
mkdir -p "as/many dirs/as you/want" && cd "$_"

istnieje rozwiązanie wymienione powyżej (to samo co moje rozwiązanie, ale bez opcji -p), ale myślę, że ma kilka pułapek.

man mkdir
...
-p, --parents
       no error if existing, make parent directories as needed
...

Daje nam to dwie korzyści:

  1. Za jednym razem możemy utworzyć tyle podkatalogów, ile potrzeba
  2. Jeśli katalog istnieje, nie zgłosi błędu i nadal będziemy mogli przejść do istniejącego katalogu.

&& cd "$_"przejdzie do nowo utworzonego katalogu, ponieważ $_przytrzymaj wartość zwróciła mójmkdir

bugbinder
źródło
to działa dla mnie
alhelal