Phím tắt dòng lệnh cho thư mục hiện tại tương tự ~ cho thư mục chính?


23

Khi tôi sử dụng lệnh cp hoặc di chuyển trong cửa sổ terminal, tôi hiện đang có bash trong một thư mục nhất định như thế này.

NES@server:~/Desktop/dir1$

Và bây giờ tôi muốn sao chép một tập tin từ đây ~/anotherdir/dir2vào thư mục được chọn hiện tại trong bash (dir1) tôi sẽ sử dụng lệnh

cp ~/anotherdir/dir2/file ~/Desktop/dir1

một chuỗi phím tắt tồn tại để tham chiếu đến thư mục được chọn hiện tại? Vì vậy, trong ví dụ này tôi không phải cung cấp đường dẫn đầy đủ đến thư mục đích, nhưng lệnh có biết nó nên sử dụng thư mục được chọn hiện tại trong bash không? tức là as ~ là viết tắt của thư mục nhà?

Câu trả lời:


41

Thư mục hiện tại của bạn là .. Vì vậy, cp /foo/fam/foo .sao chép các tập tin vào thư mục hiện tại của bạn.

Cấu trúc tương tự cho "một thư mục trở lên" hoặc thư mục mẹ của thư mục làm việc hiện tại của bạn là hai dấu chấm, nghĩa là , ... (Cảm ơn @djeikyb.)

Vì vậy, từ /usr/house/firstfloor/basement, cd ..đưa bạn một cấp độ lên đến /usr/house/firstfloor.

Trong cùng một ví dụ (bắt đầu từ /usr/house/firstfloor/basement, lệnh cd ../..sẽ đưa bạn đến /usr/house.

Bạn cũng có thể sử dụng $PWDvới echođể có được thư mục hiện tại của bạn:

echo $PWD

Ngẫu nhiên, $OLDPWDsẽ cung cấp cho bạn thư mục trước của bạn. (Mà bashbạn cũng có thể tiếp cận bằng cách gõ cd -.)


3
Tốt thời gian như bất kỳ để tìm hiểu ..có nghĩa là một thư mục thấp hơn. Có thể được sử dụng nhiều lần, tức làcd ../..
djeikyb

1
@djeikyb - ý bạn là ở trên, tôi chắc chắn. Vì vậy, cd ..sẽ đưa bạn đến thư mục mẹ của thư mục hiện tại của bạn. Điểm tốt.
belacqua

1
Và tôi đã đề cập popdpushdnhưng đó là một bài tiểu luận.
belacqua

2
Một điểm khác biệt nhỏ cần nhớ: ...ở cấp độ hệ thống tập tin, vì vậy bất kỳ chương trình nào cũng sẽ chấp nhận chúng. Mặt khác, các phím tắt như ~~-là một phần của vỏ.
grawity

2
+1 cho cd -; không biết nó tồn tại.
jg-faustus

6

Bạn có thể sử dụng $ (pwd), nó sẽ phân giải thành đầu ra từ lệnh pwd.

Thí dụ:

echo $(pwd)

1
Hoặc chỉ echo $PWD.
ulidtko

3

./ đại diện cho thư mục hiện tại. Vì vậy, bạn có thể sử dụng lệnh cp ~/anotherdir/dir2/file ./Điều này sẽ sao chép tập tin "tập tin" vào thư mục làm việc hiện tại.


3
Bạn không cần dấu gạch chéo, "." cũng đủ dấu gạch chéo (như dấu phân cách thành phần đường dẫn) chỉ cần thiết nếu bạn muốn đặt một số thành phần đường dẫn khác sau nó, nhưng sau đó dễ dàng hơn để rời khỏi ./ vì các đường dẫn tương đối có nghĩa là bắt đầu với thư mục hiện tại :)
LGB

tôi biết / không bắt buộc nhưng. một mình cảm thấy khó hiểu với tôi. cũng được sử dụng để thực thi các lệnh từ một tệp trong shell hiện tại, ví dụ: ". envsetup.sh". Vì vậy, thêm một / ở cuối chỉ làm cho nó rõ ràng hơn.
binW

1
Tiếp theo, nếu bạn ln -s /some/long/path/to/get/to/cake không có đối số thứ hai , nó sẽ đặt cakeliên kết tượng trưng trực tiếp vào hiện tại của bạn. Rất tốt cho những người lười biếng. Tiết kiệm a ..
belacqua

2

Để sử dụng thư mục hiện tại làm thư mục đích, hãy sử dụng một dấu chấm ' .'

Câu trả lời dài

Sử dụng ví dụ của bạn, bạn sẽ gõ: cp ~/anotherdir/dir2/file .

Để xem các dấu chấm ., ..../../tên thư mục trong hành động, sao chép và dán các lệnh sau vào Terminal:

mkdir a && mkdir a/b && mkdir a/b/c && mkdir a/b/c2
cd a/b/c
cp /etc/default/grub .
cp /etc/default/grub ..
cp /etc/default/grub ../c2
cd ../../
tree

Đầu ra từ lệnh cây xuất hiện như thế này:

.
└── b
    ├── c
       └── grub
    ├── c2
       └── grub
    └── grub

3 directories, 3 files

Phần .đầu của cây đại diện cho thư mục hiện tại mới a là ông bà a/b/cmà chúng ta đã điều hướng sử dụng cd ../../lệnh. Bên dưới achúng tôi thấy các thư mục con a/b, a/b/ca/b/c2

Phân tích từng dòng

Đầu tiên chúng tôi tạo 4 thư mục trên một dòng bằng cách sử dụng &&để nối nhiều dòng với nhau.

Sau đó, chúng tôi thay đổi thư mục a/b/c, là thư mục hiện tại cho các lệnh sao chép sau:

  • Trong lệnh sao chép đầu tiên ( cp), chúng tôi đặt đích đến thư mục hiện tại ( c ) với ..
  • Trong lệnh sao chép thứ hai, chúng ta đặt đích đến thư mục cha ( b ) với ...
  • Trong lệnh sao chép thứ ba, chúng tôi đặt đích đến thư mục anh chị em ( c2 ) với../c2

Sau đó, như đã nêu trước đó, chúng tôi đã thay đổi thư mục hiện tại thành avà chạy treelệnh để hiển thị tất cả các thư mục và tệp bên dưới a.

Dọn dẹp

Sau khi hoàn thành, chúng tôi xóa ba thư mục và tệp bằng:

cd ~/
rm -r tree


1

Bạn có thể sử dụng dấu chấm ( .), ~+ mở rộng dấu ngã , pwdlệnh hoặc biến $ PWD để thể hiện thư mục làm việc hiện tại (CWD). Tất cả các lệnh này có thể làm điều đó:

  1. mv file_old_dir .
  2. mv file_old_dir ~+
  3. mv file_old_dir $(pwd)
  4. mv file_old_dir $PWD

0

Có (như những người khác đã lưu ý), thư mục hiện tại là ".", Đó là lý do tại sao bạn có thể khởi động chương trình / tập lệnh từ thư mục hiện tại bằng ./script (chỉ tập lệnh sẽ không hoạt động trừ khi không phải là một phần của PATH, không được khuyến nghị Tuy nhiên). Sử dụng $ PWD hoặc $ (pwd) là hơi quá mức, ngay cả khi những người khác đề cập rằng, sử dụng một ký tự dấu chấm đơn ngắn hơn, chắc chắn :) ".." là thư mục mẹ, chắc chắn "/" là gốc. Cũng rất vui khi đề cập rằng "cd -" sẽ đưa bạn vào thư mục trước đó, nơi bạn đã ở trước khi bạn thay đổi cwd (thư mục làm việc hiện tại). Nó cũng có thể hữu ích trong công việc hàng ngày. Một lệnh "cd" duy nhất không có bất kỳ lệnh nào khác trong dòng lệnh sẽ đưa bạn vào "~" (nhà của bạn).


1
$PWDkhông phải là quá mức khi tạo liên kết tượng trưng đến các đường dẫn tuyệt đối.
ulidtko

Tôi nghĩ về ví dụ "cp", chắc chắn là vậy. Ngay cả với các liên kết tượng trưng, ​​nó phụ thuộc vào tình huống: "ln -s / this / file." sẽ tạo một liên kết tượng trưng trong thư mục trỏ tệp hiện tại / tệp / tệp này với tên "tệp" (mọi người thường nghĩ giống như "cp" không sao chép dữ liệu, chỉ một số loại liên kết: đó không phải là một định nghĩa chính xác nhưng đó là một khởi đầu tốt ). Tuy nhiên, cấu trúc ngược lại: "ln -s. / This / dir" là một phần thú vị (tạo một liên kết tượng trưng như / this / dir với tham chiếu cho thư mục hiện tại), nhưng tôi nghĩ nó nằm ngoài phạm vi của chủ đề ban đầu, và nó cũng không phải là câu hỏi.
LGB
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.