Không thể đổi tên tệp bắt đầu bằng dấu gạch nối


37

Tôi đang cố gắng đổi tên một tệp có dấu gạch nối ở đầu tên và cả hai:

mv -example-file-name example-file-name

và cái này:

mv '-example-file-name' example-file-name

kết quả là:

mv: invalid option -- 'e'

1
Sử dụng đường dẫn tương đối của tệp (./tmp/-example), đường dẫn đầy đủ (/ home / a / tmp / -example) hoặc nói với mv rằng bạn đã hoàn thành việc đưa ra các tùy chọn với - và những gì tiếp theo là tệp tên.
Ярос mặc dù chúng tôi làm việc vào

Trong trường hợp bất cứ ai thắc mắc: mv *example-file-name example-file-namecó cùng một vấn đề, bởi vì việc mở rộng tên tệp (AKA globalbing) xảy ra trước khi mvđược gọi.
Walter Tross

Câu trả lời:


53

Hầu hết các lệnh GNU / Linux cho phép một --tùy chọn chỉ ra kết thúc của các tùy chọn để các -từ có tiền tố tiếp theo không được coi là tùy chọn.

  mv -- -example-file-name example-file-name

Một bài kiểm tra nhỏ

$ touch -- -example
$ ls -l -- *ample
-rw-r--r-- 1 rgb rgb 0 Nov 25 09:57 -example
$ mv -- -example example
$

Điều này cũng giải quyết vấn đề tương tự rename. (ít nhất là phiên bản hoạt động như thế rename [options] <expression> <replacement> <file>...nào, bất kể đó là phiên bản nào.)
underscore_d

Chết tiệt, BSD / Mac OS X mvkhông có cái này :(
Sridhar Sarnobat

18

Câu trả lời của RedGrittyBrick là rất tốt. Một lựa chọn khác là:

mv ./-example-file-name example-file-name

Một bài kiểm tra nhỏ:

$ touch ./-example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./-example
$ mv ./-example example
$ ls -l ./*ample
-rw-r--r-- 1 me me 0 Nov 25 16:02 ./example

cách giải quyết rất tốt đẹp, điều này không bao giờ xảy ra với tôi. Và không giống như câu trả lời được chấp nhận, điều này sẽ hoạt động trên BSD / Mac OS X
Sridhar Sarnobat

Đó là một chút hấp dẫn hơn --.
Corni

-1

Bạn có thể sử dụng điều này:

rename -- "s/\-//g" *

rằng nó có thể đổi tên tất cả các tệp :) nếu tên tệp của bạn:

-ng--sh-ay-01[------------]-FLV

Sau khi chạy mã, tên tệp của bạn trở thành:

ngshay01[]FLV

1
Các cách tiếp cận khác (phương pháp của RedGrittyBrick và gniourf_gniourf) có nhiều khả năng hoạt động với một số lệnh khác.
TUYỆT VỜI

-1

Thủ thuật này hiệu quả với tôi trong những lúc tuyệt vọng. YMMV

rename \- '' *

Bạn phải thoát dấu gạch nối để đổi tên để nhận ra nó. Tại sao việc đổi tên không tôn trọng các trích dẫn đơn lẻ hoặc đưa ra một ghi đè nào đó nằm ngoài tôi.

Đây là phương pháp duy nhất tôi thấy rằng đáng tin cậy xử lý một dấu gạch nối hàng đầu bằng cách sử dụng đổi tên. Tôi đồng ý với các bài viết khác về việc sử dụng mv, nhưng nếu bạn không thể sử dụng mv vì bất kỳ lý do gì, điều này sẽ hoạt động.

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.