Bagaimana saya bisa membuat direktori dan mengubah direktori kerja saya ke direktori baru?

18

Saya mencari cara untuk membuat direktori dan mengubah direktori kerja saya sekarang menjadi direktori yang baru dibuat hanya dengan menggunakan satu perintah. Bagaimana saya bisa melakukan ini?

yaitu Alih-alih melakukan

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

aku ingin melakukan

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

Apa yang bisa menjadi perintah ?

Efek Kojuju
sumber

Jawaban:

27

Jika Anda benar-benar ingin hanya satu perintah, saya sarankan menambahkan sesuatu seperti ini ke .bashrc:

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

Memasukkan md foopada baris perintah kemudian akan membuat direktori yang dipanggil foodan cdlangsung masuk sesudahnya. Harap diingat, bahwa Anda harus memuat ulang .bashrcagar perubahan diterapkan (mis. Buka konsol baru, atau jalankan source ~/.bashrc).

Lih http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-at-the-same-time untuk alternatif yang memungkinkan juga.

Michael Biech
sumber
19

mkdir "NewDirectory" && cd "NewDirectory"

  • Bagian di belakang &&hanya akan mengeksekusi jika perintah 1 berhasil.
  • Ini disebut Daftar Perintah dalam manual Bash.
  • Ada juga versi singkat:

    mkdir "NewDirectory" && cd "$_"
    
  • Contoh dari baris perintah:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (sunting) Tambahkan "ke perintah karena direktori mungkin berisi spasi.

Rinzwind
sumber
mkdir "NewDir" && cd "$_"berfungsi dengan baik daripada mkdir "NewDir" && cd "NewDir"karena pelengkapan otomatis tidak berfungsi. BTW apa itu "$ _"?
TheKojuEffect
Lebih dari itu akan sangat berguna jika kita dapat melampirkan switch mkdiruntuk mengubah ke direktori baru yang dibuat.
TheKojuEffect
@TheKojuEffect $ _ see gnu.org/software/bash/manual/bashref.html#Lists Mengenai yang terakhir: tidak ada yang menghentikan Anda dari menggunakan alias atau fungsi di dalam .bashrc;)
Rinzwind
7

Tidak ada fungsi bawaan untuk itu, tetapi Anda dapat menggunakan fungsionalitas shell untuk membantu Anda tidak perlu mengetikkan argumen cdperintah lagi setelah menjalankan mkdir:

  • Ketik cd , lalu Esc .(atau Alt+ .) untuk memasukkan argumen terakhir dari perintah sebelumnya.
  • cd !$dieksekusi cdpada argumen terakhir dari perintah sebelumnya.
  • Tekan Upuntuk memanggil kembali baris perintah sebelumnya, lalu edit untuk mengubahnya mkdirmenjadi cd.

Anda dapat mendefinisikan fungsi direktori make-and-change sederhana di ~/.bashrc:

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

Muat ulang .bashrc( . ~/.bashrc) atau mulai ulang bash, dan sekarang Anda dapat mengetik mkcd new-directory.

Versi sederhana ini gagal dalam beberapa kasus yang tidak biasa yang melibatkan nama direktori aneh atau ..tautan simbolik. Inilah yang melakukannya. Untuk penjelasan, lihat versi Unix & Linux dari pertanyaan ini .

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 'SANGAT berhenti menjadi jahat'
sumber
+1 saya khusus untuk referensi spesifik-Bash untuk argumen perintah terakhir.
0xC0000022L
+1 untuk rekayasa lebih. Excelsior! :)
mhvelplund
3
mkdir -p "as/many dirs/as you/want" && cd "$_"

ada solusi yang tercantum di atas (sama dengan solusi saya tetapi tanpa opsi -p), tapi saya pikir ini memiliki beberapa jebakan.

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

Ini memberi kita dua manfaat:

  1. Kami dapat membuat subdirektori sebanyak yang diperlukan dalam sekali jalan
  2. Jika direktori ada, itu tidak akan menimbulkan kesalahan, dan kami masih dapat beralih ke direktori yang ada.

&& cd "$_"akan berubah ke direktori yang baru dibuat, karena $_menahan nilai yang dikembalikanmkdir

pencari jendela
sumber
ini bekerja untuk saya
alhelal