Làm thế nào tôi có thể tạo một thư mục và thay đổi thư mục làm việc của tôi sang thư mục mới?


18

Tôi đang tìm cách tạo thư mục và thay đổi thư mục làm việc hiện tại của mình thành thư mục mới được tạo chỉ bằng một lệnh duy nhất. Tôi có thể làm cái này như thế nào?

tức là thay vì làm

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

tôi muốn làm

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

Có thể những gì lệnh được?

Câu trả lời:


27

Nếu bạn thực sự muốn nó chỉ là một lệnh, tôi khuyên bạn nên thêm một cái gì đó như thế này vào .bashrc:

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

Nhập md foovào dòng lệnh sau đó sẽ tạo một thư mục được gọi foocdvào nó ngay sau đó. Xin lưu ý rằng bạn sẽ phải tải lại .bashrcđể các thay đổi có hiệu lực (nghĩa là mở bảng điều khiển mới hoặc chạy source ~/.bashrc).

Cf. http://www.commandlinefu.com/commands/view/3613/create-a-directory-and-change-into-it-at-the-same-time cho các lựa chọn thay thế có thể, quá.


19

mkdir "NewDirectory" && cd "NewDirectory"

  • Phần đằng sau di &&chúc chỉ thực hiện nếu lệnh 1 thành công.
  • Nó được gọi là Danh sách các lệnh trong hướng dẫn Bash.
  • Ngoài ra còn có một phiên bản tốc ký:

    mkdir "NewDirectory" && cd "$_"
    
  • Ví dụ từ dòng lệnh:

    $ false && echo "yes"
    $ true && echo "yes"
    yes
    
  • (chỉnh sửa) Thêm "vào các lệnh vì thư mục có thể chứa một khoảng trắng.


mkdir "NewDir" && cd "$_"hoạt động tuyệt vời hơn mkdir "NewDir" && cd "NewDir"là tự động hoàn thành không hoạt động. "$ _" Là gì?
TheKojuEffect

Hơn thế nữa, nó sẽ khá tiện nếu chúng ta có thể đính kèm một công tắc mkdirđể thay đổi thư mục mới được tạo.
TheKojuEffect

@TheKojuEffect $ _ xem gnu.org/software/bash/manual/bashref.html#Lists Về điều cuối cùng đó: không ai ngăn bạn sử dụng bí danh hoặc chức năng bên trong .bashrc;)
Rinzwind 30/1/13

7

Không có chức năng tích hợp cho điều đó, nhưng bạn có thể sử dụng chức năng shell để giúp bạn không phải gõ lại đối số của cdlệnh sau khi chạy mkdir:

  • Nhập cd , sau đó Esc .(hoặc Alt+ .) để chèn đối số cuối cùng từ lệnh trước đó.
  • cd !$thực hiện cdtrên đối số cuối cùng của lệnh trước đó.
  • Nhấn Upđể gọi lại dòng lệnh trước đó, sau đó chỉnh sửa nó để thay đổi mkdirthành cd.

Bạn có thể xác định chức năng thư mục thay đổi đơn giản trong ~/.bashrc:

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

Tải lại bash của bạn .bashrc( . ~/.bashrc) hoặc khởi động lại bash, và bây giờ bạn có thể nhập mkcd new-directory.

Phiên bản đơn giản này thất bại trong một số trường hợp bất thường liên quan đến tên thư mục lạ hoặc ..liên kết tượng trưng. Đây là một trong đó. Để biết giải thích, hãy xem phiên bản Unix & Linux của câu hỏi này .

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 của tôi đặc biệt dành cho các tham chiếu dành riêng cho Bash cho các đối số của lệnh cuối cùng.
0xC0000022L

+1 cho kỹ thuật hơn. Tuyệt vời! :)
mhvelplund

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

có một giải pháp được liệt kê ở trên (giống như giải pháp của tôi nhưng không có tùy chọn -p), nhưng tôi nghĩ rằng nó có một vài cạm bẫy.

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

Điều này mang lại cho chúng ta hai lợi ích:

  1. Chúng tôi có thể tạo nhiều thư mục con cần thiết trong một lần
  2. Nếu thư mục tồn tại, nó sẽ không gây ra lỗi và chúng tôi vẫn có thể chuyển sang thư mục hiện có.

&& cd "$_"sẽ thay đổi thư mục vừa tạo, vì $_giữ giá trị trả về của tôimkdir


cái này hiệu quả với tôi
alrcal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.