Làm cách nào để tôi có thể xóa một tệp hoặc thư mục có tên là tên \ \?


20

Tôi đang sử dụng thiết bị đầu cuối trên máy Ubuntu và có một tệp mà tôi muốn xóa. Tên của tệp là \(chỉ là dấu gạch chéo ngược).

Bây giờ tôi thường làm

rm filename

Tuy nhiên nếu tôi làm như vậy rm \thì nó nghĩ rằng tôi đang cố gắng viết một lệnh nhiều dòng.

Làm thế nào tôi có thể xóa tập tin này? Tôi biết rằng tôi chỉ có thể sử dụng hệ thống tệp GUI, nhưng điều đó không hiệu quả lắm.

Vì vậy, làm thế nào tôi có thể xóa (trong thiết bị đầu cuối) một tập tin được gọi là \?


1
Tại sao bạn có một tập tin có tên đó? (Nó thậm chí không cho phép tôi đặt nó trong một codekhối ở đây trong bình luận này!)
AJMansfield

7
Thú vị hơn nữa là cố gắng xóa một tệp có tên <BEL>, còn gọi là Ctrl-G nếu tôi nhớ lại chính xác. Mỗi khi bạn làm một ls bàn phím sẽ phát ra tiếng bíp cho đến khi bạn (a) phát hiện ra tập tin vô hình ; và (b) xác định cách xóa một tệp chỉ có một ký tự không thể in được trong tên của nó.
Pieter Geerkens

1
Quan trọng hơn, làm thế nào để bạn xóa một tập tin có tên "/"?
Curt

1
@Curt fsck. Nghiêm túc. Nếu một tệp có tên /tồn tại, hệ thống tệp của bạn bị hỏng.
zwol

2
Tôi luôn thích tập tin có tên *mình ...
RBerteig

Câu trả lời:


48

Sử dụng rm \\(thoát dấu gạch chéo ngược với dấu gạch chéo ngược khác). Lưu ý rằng điều này cũng hoạt động tương tự, đối với các thư mục có tên \(sử dụng rmdirhoặc rmvới -rcờ).

Thí dụ:

> mkdir demo
> bản demo cd
> chạm vào \
> ls -l
tổng 0
-rw ------- 1 người dùng hennes 0 ngày 29 tháng 7 20:25 \
> rm \\
> ls -l
tổng 0

3
Hoặc, theo cùng một nguyên tắc, rm '\'(nhưng không rm "\" ).
evilsoup

2
@evilsoup chỉ để cung cấp thêm một số làm rõ về điều đó, \ ký tự được sử dụng như một ký tự thoát trong các chuỗi phân tách trích dẫn kép. Nói rm "\"sẽ được phân tích thành một chuỗi không được tiết lộ, vì dấu ngoặc kép thứ hai được sử dụng với một ký tự thoát (và do đó sẽ được phân tích thành chính ký tự trích dẫn kép, chứ không phải là kết thúc của chuỗi). Do đó, thiết bị đầu cuối sẽ đợi cho đến khi bạn hoàn thành chuỗi với một chuỗi khác ". Phương pháp tương đương để sử dụng dấu ngoặc kép ở đây sẽ là rm "\\"(tương đương trực tiếp với cả hai rm '\'rm \\ , như bạn đã xác nhận).
Đột phá

15

Một chiến thuật chung để xóa thủ công các tệp có ký tự khó xử trong tên của chúng là

rm -i ./*

Điều này sẽ nhắc bạn chọn có hay không xóa từng tệp trong thư mục.


3
Hoặc, độc thân nó là một char duy nhất. rm -i ./?
Hennes

1
Vâng. Nếu bạn có thể viết một quả cầu cụ thể hơn ./*, đó luôn là một ý tưởng hay, đặc biệt là khi làm một việc gì đó mang tính hủy diệt.
zwol

4
+1 cho tiền tố toàn cầu của bạn với./
evilsoup

12

Bạn cũng có thể hủy liên kết bằng cách tham chiếu inode của tệp

linus ~/test $ touch \\
linus ~/test $ ls -li
total 0
15204561 -rw-r--r-- 1 pat sudo 0 Jul 29 23:03 \
linus ~/test $ find . -inum 15204561 -exec rm -v {} \;
removed `./\\'
linus ~/test $ ls -li
total 0
linus ~/test $ 

0

Vui lòng kiểm tra inode của tập tin đầu tiên. ls -li

137791 -rw-rw-r--. 1 s ghi src 366 Mar 11 15:57

inode của "\" là "137791 và sau đó sử dụng lệnh find để xóa" \ "với số inode.

tìm thấy . -inum 137791 -exec rm -i {} \;

rm: xóa tệp thông thường `./ \ '? Vâng

"\" sẽ bị xóa sau đó.

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.