Tôi cần sử dụng lệnh nào để xóa một tệp có tên `-rf`?


67

Tôi đã làm một cái gì đó điên rồ tại một số điểm đã tạo ra một tệp được gọi -rftrên hệ thống tập tin của tôi.
Bây giờ tôi không thể tìm ra cách xóa nó ...

Tôi đã thử:

rm "-rf"
rm \-rf

Những điều này chỉ cần thoát ngay lập tức, cholgh!

Bất cứ ai biết làm thế nào để loại bỏ tập tin này? Tốt nhất là không vô tình làm sạch toàn bộ thư mục của tôi.


33
Một số dây thần kinh cố gắng rmmột tập tin được gọi -rftừ hệ thống của bạn mà không nhớ cú pháp chính xác!
BarsheD

3
Để giải thích lý do tại sao những cái đó không hoạt động: Dấu ngoặc kép và thoát được phân tách bằng shell của bạn (thường là bash), và sau đó kết quả của việc phân tích cú pháp được chuyển đến rm(trong đó argcargv) Do đó, cả hai kết quả trong mảng ["rm", "-rf"]được truyền đến rm, đó là những gì bạn mong đợi.
Thanatos

3
Tôi nghĩ rằng đây là gần gũi hơn với một bản sao của bộ phim đến từ Unix và Linux stackexchange: unix.stackexchange.com/questions/1519/...
frabjous

12
Một trò đùa cũ là để có được một tập tin có tên *vào một thư mục. Bao gồm một người được đặt tên -rflà tốt và xem niềm vui ;-)
RBerteig

@RBerteig: mkdir './-rf '(ls - classify, một mặc định phổ biến trong bí danh shell, sẽ nối thêm a /)

Câu trả lời:


127
unlink -rf

Hoặc là

rm -- -rf

47
Đây là giải pháp hữu ích nhất để tìm hiểu IMO, bởi vì '-' để dừng xử lý các đối số được tiêu chuẩn hóa trên các công cụ GNU
Nathan O'Sullivan

1
Nói chính xác hơn, mọi thứ sử dụng GNUgetopt đều có --nghĩa là hầu hết các công cụ linux hiện đại.
Geoffrey Zheng

60

Một lựa chọn khác:

rm ./-rf

... Xem thư mục hiện tại của bạn là nơi chứa tệp.


34

Ngoài ra, bạn luôn có thể chỉnh sửa thư mục trong đó và xóa tệp theo cách đó.

vim .

và sau đó chỉ cần xóa dòng có tệp trên đó (sử dụng D, dd sẽ không hoạt động).


5
Bí quyết đẹp! [Một số ký tự vô dụng]
Sergio Acosta

Tôi đã không nghĩ rằng điều này xứng đáng với những điều đáng tiếc khi lần đầu tiên tôi thấy câu trả lời này vào chiều nay, nhưng tôi không có cơ hội để xác minh rằng vimcó chế độ chuyển hướng. Rõ ràng, không nên chỉnh sửa thư mục thực tế trong trình soạn thảo văn bản , cũng như không thể thực hiện được nếu không có chuyên gia thực sự nhảy. Lưu ý rằng emacssẽ làm việc quá, và cho cùng một lý do.
RBerteig

1
Thêm điểm cho việc sử dụng Vim thông minh! :)
Pierre-Antoine LaFọ

rất vui được biết;)
schöppi

25

Một kỹ thuật chung để xóa tên tệp lạ là sử dụng.

 ls -li

để tìm số inode của tập tin và sau đó sử dụng.

find ./ -inum <number of file> -delete

Không cần phải nhớ tất cả các trường hợp đặc biệt.


4
Không biết findcó sức mạnh để xóa các tập tin.
zneak

Điều này cũng tuyệt vời để bắt các tệp có tên không xác định (bắt đầu bằng hoặc bao gồm các ký tự backspace hoặc có thêm khoảng trắng ở cuối), miễn là bạn có quyền truy cập vào một GNU tìm thấy trên hộp của bạn.
Olfan

17

Mặc dù tôi biết về thủ thuật "rm - -filename", nói chung khi tôi bằng cách nào đó nhận được một tệp có hàng đầu - với tên mà tôi muốn xóa, tôi khởi động trình quản lý tệp GUI và thực hiện từ đó, để loại bỏ cơ hội của những sai lầm.


1
Anh ta có thể không có GUI nào cả, vì vậy điều này có thể không hoạt động.
Wuffers

12
Nếu nó ngu ngốc và sai thì có lẽ nó đáng bị downvote, nhưng tôi không tin vào việc hạ thấp câu trả lời này chỉ vì nó 'có thể không hoạt động'. Không có hại có thể đến từ đề nghị này.
JT.WK

4
Luôn luôn có chỉ huy nửa đêm (hoặc người quản lý tệp dựa trên lời nguyền khác) cho những người không có X.
thomasrutter

9

Nếu bạn chỉ muốn chắc chắn:

 mv -- -rf remove.-rf
 [[check]]
 rm remove.-rf

4

Chỉ trong trường hợp bạn đang sử dụng một số Unix không phải GNU mà bạn cảm thấy mình bị kéo lùi về thời kỳ đồ đá (không có --cú pháp, không có -inumcông tắc để tìm, không có lệnh hủy liên kết, trình soạn thảo của bạn từ chối chỉnh sửa thư mục, v.v.), bạn vẫn có thể tự giúp mình:

find . -name '-rf' -print | xargs rm -i

Điều này sẽ khiến tìm thấy để cung cấp cho tất cả các ứng cử viên tiềm năng để rm mà lần lượt sẽ yêu cầu sự cho phép / từ chối cho mỗi tệp mà nó được cung cấp.

Trong trường hợp bạn rmthậm chí không hỗ trợ công -itắc (HP-UX 10.2 trên PA-RISC 1.1?), Hãy cẩn thận hơn:

find . -name '-rf' -print
# check that find's output is exactly and only what you need to delete
find . -name '-rf' -print | xargs rm

Điều gì nếu hệ thống của bạn thậm chí không có find?
Lie Ryan

Đó thực sự là xấu xa. Than ôi, tôi vẫn chưa đáp ứng cài đặt Unix mà không có. Bạn có thể cho tôi một con trỏ?
Olfan

Suy nghĩ một chút, câu trả lời của tôi sẽ phù hợp hơn là câu hỏi được hỏi trên serverfault. Siêu người dùng không hoàn toàn có thể có máy móc xung quanh cổ xưa như những gì tôi đang đề cập. Và những người làm sẽ học được cách giúp đỡ chính họ. ;-)
Olfan

+1, @Olfan, trong bạn bảo vệ, có người chỉ là bây giờ gặp phải một di sản unix trong một tủ quần áo ở đâu đó vẫn cần một nguồn lực để tìm hiểu các mẹo và thủ thuật từ ...
RBerteig

3

Hỗ trợ câu trả lời của jleedev , tôi sẽ cải thiện với:

rm -i -- -rf

ở chế độ tương tác và yêu cầu xác nhận, vì vậy bạn thực sự có thể chắc chắn về những gì bạn xóa. (mặc dù giải pháp là tốt. Nó chỉ đơn giản là để bạn yên tâm)

Trên thực tế, thậm chí sử dụng rằng:

\rm -i -- -rf

để chắc chắn rằng bạn không sử dụng bất kỳ bí danh nào.


2

Vì nó đã được đề xuất nên tôi luôn sử dụng cú pháp

rm -rf -- filename

khi tôi phải xóa một tệp có dấu gạch ngang làm tiền tố bởi vì - nói với lệnh rằng nó không tìm kiếm bất kỳ tham số nào khác mà chỉ là tên tệp.

Hãy ghi nhớ nó, để bảo vệ thư mục quan trọng của tôi bằng cách xóa tệp vô tình, tôi đã sử dụng để tạo một tệp trống có tên đơn giản là -i thường được đặt ở đầu danh sách tệp khi giải quyết tìm kiếm *. Vì vậy, lệnh

rm -rf *

khi bị loại bỏ trên thư mục được bảo vệ của tôi bị nổ, thực thi lệnh, trong lệnh:

rm -rf -i filename1 filename2 .... (all the other files in the folder)

và shell, thay vì xóa mọi thứ ngay lập tức, dừng yêu cầu xác nhận (như tùy chọn -i yêu cầu).


+1 cho -itên tệp hack - "Tôi" đã bị nghi ngờ, nhưng nó đã kiểm tra!
rymo

2

Lần trước tôi gặp vấn đề này, tôi đã giải quyết nó bằng:

trăn

nhập khẩu os

os.remove ("- rf")


1

đất sét martin là đúng.

Nó rất đơn giản và hợp lý. Nếu các tùy chọn tồn tại, nó luôn luôn -XXXhoặc --CCCCnếu bạn đặt một ./hoặc toàn bộ đường dẫn -rfkhông thể được coi là một tùy chọn và sẽ được coi là một chuỗi bình thường.

Nó hoạt động với "tất cả" tên tập tin lạ.

#pwd
/ tmp / KIỂM TRA
# cảm ứng ./-rf
#ls 
-rf
#rm ./-rf 
#ls
#

1

rm - -rf hầu hết các công cụ gnu chấp nhận - làm điểm đánh dấu kết thúc các tùy chọ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.