Đổi tên thư mục hiện tại từ shell - có thể?


24

Có thể đổi tên thư mục làm việc hiện tại từ trong shell (Bash trong trường hợp cụ thể của tôi) không? Nếu tôi cố gắng làm điều này theo cách đơn giản, tôi sẽ gặp lỗi:

nathan@nathan-desktop:/tmp/test$ mv . test2
mv: cannot move ‘.’ to ‘test2’: Device or resource busy

Có cách nào khác để làm điều này mà không thay đổi thư mục hiện tại không? Tôi nhận ra rằng tôi có thể dễ dàng thực hiện điều này bằng cách thay đổi thư mục mẹ, nhưng tôi tò mò nếu điều này là cần thiết. Rốt cuộc, nếu tôi đổi tên thư mục từ shell khác, tôi vẫn có thể tạo các tệp trong shell ban đầu sau đó.

Câu trả lời:


41

Có, nhưng bạn phải tham khảo thư mục theo tên, không phải bằng cách sử dụng .ký hiệu. Bạn có thể sử dụng một đường dẫn tương đối, nó chỉ phải kết thúc bằng một thứ khác .hoặc ..:

/tmp/test$ mv ../test ../test2
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

Bạn có thể sử dụng một đường dẫn tuyệt đối:

/tmp/test$ cd -P .
/tmp/test2$ mv "$PWD" "${PWD%/*}/test3"
/tmp/test2$ 

Tương tự, rmdir .sẽ không bao giờ làm việc, nhưng rmdir "$PWD"không.


Hoàn hảo ... chính xác câu trả lời tôi đã hy vọng.
Nathan Osman

5
Vấn đề cơ bản là bạn không được phép xóa hoặc đổi tên đặc biệt "." và tên "..".
Barmar 4/03/2015


1

Và nó phụ thuộc vào cách bạn xác định việc thay đổi thư mục hiện tại.

/tmp/test$ (cd .. && mv test test2)
/tmp/test$ pwd
/tmp/test
/tmp/test$ pwd -P
/tmp/test2

sinh ra một lớp con và thay đổi thư mục hiện tại trong lớp con, nhưng để lại lớp vỏ chính của bạn.

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.