Come posso creare una directory e cambiare la mia directory di lavoro nella nuova directory?


18

Sto cercando un modo per creare una directory e cambiare la mia attuale directory di lavoro in una nuova directory creata semplicemente usando un singolo comando. Come posso fare questo?

cioè invece di fare

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

voglio fare

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

Quale può essere il comando ?

Risposte:


27

Se vuoi davvero che sia solo un comando, ti suggerisco di aggiungere qualcosa di simile al tuo .bashrc:

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

L'inserimento md foodalla riga di comando creerà quindi una directory chiamata fooe cdin essa immediatamente dopo. Tieni presente che dovrai ricaricare il tuo .bashrcper rendere effettive le modifiche (ad esempio, aprire una nuova console o eseguire source ~/.bashrc).

Cf. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time anche per possibili alternative.


19

mkdir "NewDirectory" && cd "NewDirectory"

  • La parte dietro &&verrà eseguita solo se il primo comando ha esito positivo.
  • Si chiama un elenco di comandi nel manuale di Bash.
  • Esiste anche una versione abbreviata:

    mkdir "NewDirectory" && cd "$_"
    
  • Esempio dalla riga di comando:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (modifica) Aggiungi "ai comandi poiché la directory potrebbe contenere uno spazio.


mkdir "NewDir" && cd "$_"funziona alla grande, mkdir "NewDir" && cd "NewDir"poiché il completamento automatico non funziona. A proposito, cos'è "$ _"?
TheKojuEffect

Inoltre sarebbe molto utile se possiamo collegare un passaggio a mkdirper passare alla nuova directory creata.
TheKojuEffect

@TheKojuEffect $ _ vedi gnu.org/software/bash/manual/bashref.html#Lists Per quanto riguarda l'ultimo: nessuno ti impedisce di usare un alias o una funzione all'interno .bashrc;)
Rinzwind

7

Non esiste una funzione integrata per questo, ma puoi usare la funzionalità shell per aiutarti a non dover digitare cdnuovamente l'argomento del comando dopo l'esecuzione mkdir:

  • Digitare cd , quindi Esc .(o Alt+ .) per inserire l'ultimo argomento dal comando precedente.
  • cd !$esegue cdl'ultimo argomento del comando precedente.
  • Premere Upper richiamare la riga di comando precedente, quindi modificarla per cambiarla mkdirin cd.

Puoi definire una semplice funzione per creare e cambiare directory nel tuo ~/.bashrc:

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

Ricarica il tuo .bashrc( . ~/.bashrc) o riavvia bash e ora puoi digitare mkcd new-directory.

Questa semplice versione fallisce in alcuni casi insoliti che coinvolgono strani nomi di directory o ..collegamenti simbolici. Eccone uno che lo fa. Per spiegazioni, vedere la versione Unix e Linux di questa domanda .

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
}

Il mio +1 è specifico per i riferimenti specifici di Bash agli argomenti dell'ultimo comando.
0xC0000022L,

+1 per ingegneria eccessiva. Excelsior! :)
mhvelplund,

3
mkdir -p "as/many dirs/as you/want" && cd "$_"

c'è una soluzione elencata sopra (uguale alla mia soluzione ma senza l'opzione -p), ma penso che abbia alcune insidie.

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

Questo ci offre due vantaggi:

  1. Siamo in grado di creare tutte le sottodirectory necessarie in una volta sola
  2. Se la directory esiste, non genererà un errore e saremo ancora in grado di passare alla directory esistente.

&& cd "$_"passerà alla directory appena creata, poiché $_contenere il valore restituito mymkdir


questo funziona per me
alhelal,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.