lệnh mv nhầm lẫn tên thư mục với tùy chọn lệnh


12

Tôi có một thư mục được gọi --pycache--, mà tôi cần phải di chuyển đến __pycache__. Sử dụng mvlệnh theo cách sau, cho tôi đầu ra được liệt kê. Làm thế nào tôi có thể sử dụng CLIđể làm những gì tôi muốn?

$ mv --pycache-- __pycache__
/bin/mv: unrecognized option '--pycache--/'

Câu trả lời:


22

Đây là một vấn đề tiêu chuẩn với tên tệp / thư mục bắt đầu bằng các ký hiệu ít thông thường hơn. Vấn đề của bạn là mv đang xử lý --pycache-- dưới dạng tên tùy chọn dài (vì nó bắt đầu bằng -, cũng có các tùy chọn ngắn, chúng bắt đầu bằng -). Vui lòng xem manpage cho getopt để biết chi tiết về các tùy chọn dài và ngắn.

Cách giải quyết tiêu chuẩn trong tình huống này là sử dụng dấu gạch ngang kép trống - trước tất cả các đối số, cho biết lệnh (mv trong trường hợp của bạn, nhưng sẽ làm việc với người khác, ví dụ cp) để dừng xử lý những gì sau đây là tùy chọn và coi nó như là tùy chọn tranh luận.

Do đó, lệnh của bạn sẽ trở thành:

$ mv -- --pycache--/ __pycache__

và sẽ không thất bại.


8
câu trả lời tốt nhưng tôi nghĩ bạn có ý nghĩa - nói với lệnh ngừng xử lý những gì tiếp theo là các tùy chọn và coi nó như là đối số, không phải là cách khác.
RoundTower

1
Tôi nghĩ rằng nó dễ mang theo hơn để trả trước ./: mv ./--pycache-- __pycache__.
Kevin

3
@Kevin Điều đó chỉ hoạt động nếu đối số là tên tệp.
starblue

16

Ký tự đầu tiên của bạn -không rõ ràng cho mvlệnh (hay đúng hơn, nó rõ ràng có nghĩa là một tên tùy chọn theo sau).

Hãy thử điều này thay thế:

mv ./--ppycache-- __pycache__

Nguồn: linux.about.com


2
+1 cho giải pháp thay thế cũng hoạt động nếu lệnh không hỗ trợ -
Sverre Rabbelier
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.