Comment puis-je créer un répertoire et changer mon répertoire de travail dans le nouveau répertoire?

18

Je cherche un moyen de créer un répertoire et de changer mon répertoire de travail actuel en un répertoire nouvellement créé simplement en utilisant une seule commande. Comment puis-je faire ceci?

c'est à dire au lieu de faire

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

je veux faire

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

Quelle peut être la commande ?

TheKojuEffect
la source

Réponses:

27

Si vous voulez vraiment que ce soit juste une commande, je suggère d'ajouter quelque chose comme ça à votre .bashrc:

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

Entrer md foosur la ligne de commande créera alors un répertoire appelé fooet cddedans immédiatement après. Veuillez garder à l'esprit que vous devrez recharger votre .bashrcpour que les modifications prennent effet (c'est-à-dire ouvrir une nouvelle console ou exécuter source ~/.bashrc).

Cf. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time pour également des alternatives possibles.

Michael Biech
la source
19

mkdir "NewDirectory" && cd "NewDirectory"

  • La partie derrière le &&ne s'exécutera que si la 1ère commande réussit.
  • Il s'agit d'une liste de commandes dans le manuel de Bash.
  • Il existe également une version abrégée:

    mkdir "NewDirectory" && cd "$_"
    
  • Exemple de ligne de commande:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (modifier) ​​Ajouter "aux commandes car le répertoire peut contenir un espace.

Rinzwind
la source
mkdir "NewDir" && cd "$_"fonctionne très bien mkdir "NewDir" && cd "NewDir"car la saisie automatique ne fonctionne pas. BTW qu'est-ce que "$ _"?
TheKojuEffect
Plus que cela, il serait très pratique si nous pouvons attacher un commutateur à mkdirpour passer au nouveau répertoire créé.
TheKojuEffect
@TheKojuEffect $ _ voir gnu.org/software/bash/manual/bashref.html#Lists Concernant ce dernier: personne ne vous empêche d'utiliser un alias ou une fonction à l'intérieur .bashrc;)
Rinzwind
7

Il n'y a pas de fonction intégrée pour cela, mais vous pouvez utiliser la fonctionnalité shell pour vous éviter d'avoir à taper à nouveau l'argument de la cdcommande après l'exécution mkdir:

  • Tapez cd , puis Esc .(ou Alt+ .) pour insérer le dernier argument de la commande précédente.
  • cd !$s'exécute cdsur le dernier argument de la commande précédente.
  • Appuyez sur Uppour rappeler la ligne de commande précédente, puis le modifier pour changer mkdiren cd.

Vous pouvez définir une fonction de répertoire de création et de modification simple dans votre ~/.bashrc:

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

Rechargez votre .bashrc( . ~/.bashrc) ou redémarrez bash, et maintenant vous pouvez taper mkcd new-directory.

Cette version simple échoue dans certains cas inhabituels impliquant des noms de répertoire étranges ou ..des liens symboliques. Voici celui qui fait. Pour des explications, voir la version Unix et Linux de cette question .

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- arrête d'être méchant'
la source
Mon +1 est spécifiquement pour les références spécifiques à Bash aux arguments de la dernière commande.
0xC0000022L
+1 pour plus d'ingénierie. Excelsior! :)
mhvelplund
3
mkdir -p "as/many dirs/as you/want" && cd "$_"

il y a une solution listée ci-dessus (identique à ma solution mais sans option -p), mais je pense qu'elle a quelques pièges.

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

Cela nous donne deux avantages:

  1. Nous pouvons créer autant de sous-répertoires que nécessaire en une seule fois
  2. Si le répertoire existe, il ne générera pas d'erreur et nous pourrons toujours basculer vers le répertoire existant.

&& cd "$_"changera dans le répertoire nouvellement créé, car $_maintenez la valeur renvoyée monmkdir

thebugfinder
la source
cela fonctionne pour moi
alhelal