Nasıl dizin oluşturabilirim ve çalışma dizinimi yeni dizine değiştirebilirim?


18

Sadece tek bir komut kullanarak dizin oluşturmak ve yeni oluşturulan dizine şimdiki çalışma dizini değiştirmek için bir yol arıyorum. Bunu nasıl yapabilirim?

yani yapmak yerine

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

ben yapmak istiyorum

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

Komut ne olabilir ?

Yanıtlar:


27

Gerçekten sadece bir komut olmasını istiyorsanız, aşağıdakine böyle bir şey eklemenizi öneririz .bashrc:

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

Girme md foodaha sonra komut satırına bir adlandırılan dizin oluşturacaktır foove cdhemen ardından ona. .bashrcDeğişikliklerin geçerli olması için (örneğin yeni bir konsol açın veya çalıştırın source ~/.bashrc) cihazınızı yeniden yüklemeniz gerekeceğini lütfen unutmayın .

Krş Ayrıca olası alternatifler için http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time .


19

mkdir "NewDirectory" && cd "NewDirectory"

  • İrade arkasındaki bölüm &&yalnızca 1. komut başarılı olduğunda çalışır.
  • Buna Bash kılavuzunda Komut Listeleri denir .
  • Ayrıca steno versiyon da vardır:

    mkdir "NewDirectory" && cd "$_"
    
  • Komut satırından örnek:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (edit) Add "komutları, dizin içinde boşluk olabileceğinden.


mkdir "NewDir" && cd "$_"mkdir "NewDir" && cd "NewDir"otomatik tamamlama çalışmadığından çok daha iyi çalışır. BTW "$ _" nedir?
TheKojuEffect

Dahası, mkdiroluşturulan yeni dizine geçmek için bir anahtar ekleyebilirsek oldukça kullanışlı olacaktır .
TheKojuEffect

@TheKojuEffect $ _ bkz. Gnu.org/software/bash/manual/bashref.html#Lists Sonuncusu ile ilgili olarak: kimse sizi bir takma ad veya işlev kullanmaktan .bashrc
alıkoymuyor

7

Bunun için yerleşik bir işlev yoktur, ancak cdçalıştırdıktan sonra komutun argümanını tekrar yazmanıza yardımcı olmamak için kabuk işlevini kullanabilirsiniz mkdir:

  • Tip cd sonra, Esc .(veya Alt+ .) Önceki komutundan son argüman eklemek için.
  • cd !$cdönceki komutun son argümanında yürütür .
  • Basın Up, bu değiştirmek için daha sonra düzenlemek önceki komut satırı hatırlamak mkdiriçine cd.

Basit bir yap ve değiştir-dizin fonksiyonu tanımlayabilirsiniz ~/.bashrc:

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

.bashrc( . ~/.bashrc) 'Nizi yeniden yükleyin veya bash'ı yeniden başlatın ve şimdi yazabilirsiniz mkcd new-directory.

Bu basit sürüm, garip dizin adlarını veya ..sembolik bağlantıları içeren bazı olağandışı durumlarda başarısız olur . İşte olan. Açıklamalar için bu sorunun Unix ve Linux sürümüne bakın .

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
}

+1, özellikle son komutun argümanlarına Bash'a özgü referanslar içindir.
0xC0000022L

Aşırı mühendislik için +1. Excelsior! :)
mhvelplund

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

Yukarıda listelenen bir çözüm var (benim çözümümle aynı, ancak -p seçeneği yok), ancak birkaç tuzak olduğunu düşünüyorum.

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

Bu bize iki fayda sağlar:

  1. Tek seferde gerektiği kadar alt dizin oluşturabiliriz
  2. Dizin varsa, bir hata atmaz ve yine de varolan dizine geçebiliriz.

&& cd "$_"yeni oluşturulan dizine değişecek, çünkü $_döndürülen değermkdir


bu benim için çalışıyor
alhelal
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.