Como posso criar um diretório e alterar meu diretório de trabalho para o novo diretório?

11

Estou procurando uma maneira de criar diretório e alterar meu diretório de trabalho atual para o diretório recém-criado apenas usando um único comando. Como posso fazer isso?

ou seja, em vez de fazer

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

Eu quero fazer

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

O que pode ser o comando ?

    
por TheKojuEffect 30.01.2013 / 10:31

4 respostas

22

Se você realmente quer que seja apenas um comando, sugiro adicionar algo assim ao seu .bashrc :

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

Digitar md foo na linha de comando criará um diretório chamado foo e cd nele imediatamente depois. Lembre-se de que você precisará recarregar seu .bashrc para que as alterações entrem em vigor (por exemplo, abra um novo console ou execute source ~/.bashrc ).

Cf. link para possíveis alternativas também.

    
por Michael Biech 30.01.2013 / 11:08
11

mkdir "NewDirectory" && cd "NewDirectory"

  • A parte por trás do && só será executada se o primeiro comando for bem-sucedido.
  • É chamado de Listas de Comandos no manual de Bash.
  • Existe também uma versão abreviada:

    mkdir "NewDirectory" && cd "$_"
    
  • Exemplo da linha de comando:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (edit) Adicione "aos comandos, pois o diretório pode conter um espaço.

por Rinzwind 30.01.2013 / 10:37
6

Não há nenhuma função interna para isso, mas você pode usar a funcionalidade do shell para ajudá-lo a não precisar digitar o argumento do comando cd novamente após executar mkdir :

  • Digite cd , então Esc . (ou Alt + . ) para inserir o último argumento do comando anterior.
  • cd !$ executa cd no último argumento do comando anterior.
  • Pressione Para cima para recuperar a linha de comando anterior e edite-a para alterar mkdir para cd .

Você pode definir uma função simples de diretório make-and-change no seu ~/.bashrc :

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

Recarregue seu .bashrc ( . ~/.bashrc ) ou reinicie o bash, e agora você pode digitar mkcd new-directory .

Esta versão simples falha em alguns casos incomuns envolvendo nomes de diretórios estranhos ou .. e links simbólicos. Aqui está um que faz. Para obter explicações, consulte o Unix & amp; Versão Linux desta questão .

mkcd () {
  case "" in
    /*) mkdir -p "" && cd "";;
    */../*) (cd "./${1%/../*}/.." && mkdir -p "./${1##*/../}") && cd "";;
    ../*) (cd .. && mkdir -p "${1#.}") && cd "";;
    *) mkdir -p "./" && cd "./";;
  esac
}
    
por Gilles 30.01.2013 / 20:34
2
mkdir -p "as/many dirs/as you/want" && cd "$_"

existe uma solução listada acima (igual à minha solução, mas sem opção -p), mas acho que tem algumas armadilhas.

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

Isso nos dá dois benefícios:

  1. Podemos criar quantos subdiretórios forem necessários de uma só vez
  2. Se o diretório existir, ele não lançará um erro e ainda poderemos alternar para o diretório existente.

&& cd "$_" mudará para o diretório recém-criado, pois $_ mantém o valor retornado meu mkdir

    
por thebugfinder 30.01.2015 / 14:23