Cách xóa một tập tin có tên bắt đầu bằng từ -rửa bằng cách sử dụng cli [trùng lặp]


5

Câu hỏi này đã có câu trả lời ở đây:

Thỉnh thoảng tôi vẫn tạo các tệp có tên kỳ lạ, vd

$ls -rthl
$-rw-r--r--  1 shamil hep  290 Aug 13 11:58 -rf

Và thật thú vị là không thể xóa tệp này với

rm -f -rf

Tôi biết tôi cần phải thoát khỏi các ký hiệu đặc biệt như "-", vì vậy vấn đề đã rõ ràng. Và tôi đã từng biết giải pháp, nhưng từ đó đã quên.

Làm thế nào để tôi xóa nó đúng cách?

Tôi đã thử những thứ như thế này

rm -f \-rf

nhưng không có kết quả.


Ty. Bằng cách nào đó tôi đã không thể tìm thấy nó.
Chikipowpow 17/12/13

2
Có lẽ tốt nhất là chỉ cần lôi ra những khẩu súng lớnpython -c 'import os; os.remove("-rf")'
u2EF1

@ U2EF1 đẹp. Tôi đã từng sử dụng bản hack đó trước khi học --:) Thật đáng buồn, không phải bản phân phối nào cũng có Python, vì vậy nó cũng không dễ mang theo.
Paulo Bu

Câu trả lời:


13

--chuyển đổi có nghĩa là: Kết thúc cờ, mọi thứ sau khi được coi là tên tệp . Vì vậy, bạn có thể làm:

rm -- -rf

Bao gồm đường dẫn đầy đủ đến tập tin cũng hoạt động:

rm /full/path/to/-rf

Trên thực tế, đây là loại vui nhộn nhưng dòng lệnh này có thể cung cấp cho bạn câu trả lời :)

$man rm | cat | grep -B4 -A3 -- "rm --"

To remove a file whose name starts with a `-', for example `-foo', use 
one of these commands:

rm -- -foo
rm ./-foo

1
Điều này sẽ không hoạt động với tất cả các lệnh.
Donovan

Xin vui lòng cung cấp một ví dụ? Tôi đã trích dẫn man bashở đó.
Paulo Bu

@PauloBu man rmtrong bash?

1
@MadPhysicist không, thực sự tôi trích dẫn man bash. Nhưng nhìn thấy man rmcó một dòng cho bạn biết rằng:man rm |cat |grep -B4 -A3 -- "rm --"
Paulo Bu

2
Liệu quy ước này có hoạt động với tất cả các lệnh không liên quan hay không, và một câu trả lời khác nhau cho một câu hỏi khác. Người hỏi đặc biệt hỏi về rmvà xóa các tập tin và một cách để gọi rmxe mà đã quên. Câu trả lời của Paulo Bu đặc biệt liên quan đến điều đó, thậm chí trích dẫn hướng dẫn về rmnơi người hỏi sẽ tìm thấy câu trả lời xyr. Vấn đề chính của nó là sử dụng vô dụng cat. (-:
JdeBP


2

cách khác:

find -name "-rf" -exec rm {} \;

Điều này phụ thuộc vào hành vi không có giấy tờ của find- bạn có bất kỳ thông tin nào về việc có bao nhiêu biến thể của * nix hỗ trợ không? Dù sao, đó chỉ là một cách nói vòng vo rm ./-rf.
Scott

@Scott findkhông có đối số thư mục là dành riêng cho Linux (cả GNU và BusyBox) và tương đương với find .. Các tên được liệt kê bởi find .rõ ràng không bắt đầu với -vì chúng bắt đầu bằng ./.
Gilles

Nhưng đó là quan điểm của tôi - làm thế nào để bạn biết rằng find . … -exec … xây dựng các đối số lệnh bắt đầu bằng ./? Chắc chắn, bạn có thể đoán rằng nó, từ hành vi của find . … -print(ví dụ, ngược lại, ls .hoặc ls -l .), và có thể nó là tiêu chuẩn, nhưng nó không được ghi lại.
Scott
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.