Có một tệp có tên ~ (dấu ngã) trong thư mục nhà của tôi


46

Tôi chỉ nhận thấy rằng tôi có một tập tin được gọi ~trong thư ~mục của tôi .

$ ls -la ~
...
-rw-r-----  1 x1 x1  733962240 Mar  1 17:55 ~
...

Bất cứ ý tưởng làm thế nào tôi có thể mvhoặc rmnó?


Cố gắng xóa nó bằng nút i.
gronostaj

Câu trả lời:


55

Giải pháp tối ưu khá nhiều khi nói đến các tệp không thể bị xóa bằng các phương tiện thông thường:

ls -il 

Cột đầu tiên sẽ hiển thị số inode của các tệp.

find . -inum [inode-number] -exec rm -i {} \;

Thao tác này sẽ xóa tệp có số inode được chỉ định sau khi xác minh.


Điều này đã làm việc. Có lẽ giải pháp của rici cũng tốt, nhưng tôi đã không thử. Cảm ơn rất nhiều!
scrrr

Vâng, câu trả lời của rici cũng tốt. Và tôi nghĩ nó tốt hơn bởi vì nó đơn giản hơn.
Andrey Regentov

tốt đẹp, +1. Tôi đã thay đổi câu trả lời của bạn để sử dụng -deletethay vì -exec, sau đó nhận ra rằng bạn đang sử dụng rm -iđó là một ý tưởng tốt để tôi quay lại. Lấy làm tiếc.
terdon

Đừng lo lắng. Luôn luôn vui mừng khi ai đó coi câu trả lời của tôi xứng đáng với thời gian của họ :)
Squeezy

Câu trả lời này không hiệu quả với tôi. Ubuntu 14.04 LTS
Rexford

45

Bạn sẽ có thể xem tệp đó là ~/~(không có dấu ngoặc kép) vì mở rộng dấu ngã chỉ áp dụng dấu ngã ( ~) ở đầu từ.


17
Ngoài ra, đi đến thư mục và rm ./~, với cùng lý do bạn đã nói
Carlos Campderrós

@ CarlosCampderrós xem xét đưa ra câu trả lời. Tôi sẽ coi đó là giải pháp "tốt nhất" và đơn giản nhất, so với các câu trả lời khác vì ./~nghĩa đen là "một tệp hoặc thư mục có tên ~trong thư mục hiện tại" . Không có hack như ký tự thoát hoặc tham chiếu inode.
ADTC

@ADTC: để bảo vệ câu trả lời của tôi, nó không yêu cầu thay đổi CWD, trong khi sử dụng ./~thì không. Sau năm năm, ký ức của tôi là một chút mờ, nhưng tôi nghĩ đó là lý do tại sao tôi đề nghị ~/~chứ không phải là bình thường hơn ./~: Câu hỏi đặt ra đặc biệt đề cập đến "một file có tên ~trong [OP của] thư mục home "; không "trong thư mục hiện tại".
rici

@rici Điều đó có ý nghĩa, và trong bối cảnh của câu hỏi, nó sẽ phù hợp. Nhưng tôi thích xem câu trả lời chung chung, hoặc nói chung trước tiên trước khi giải thích rõ hơn về trường hợp cụ thể của câu hỏi. Đó là sự bảo vệ của tôi: D
ADTC

20

Trích dẫn nó ( rm '~') hoặc thoát nó ( rm \~).


Nó luôn luôn là một trong số đó (cũng là ví dụ $) hoặc thêm --vào để ngăn tên tệp bị hiểu là đối số: rm -- -ixóa tệp có tên -i; cũng hữu ích rm -- *khi bạn muốn xóa tất cả các tệp trong thư mục hiện tại: Không phải ngẫu nhiên rm -f *chỉ vì một tệp được đặt tên như vậy.


Hừm, không có vẻ như nó không hoạt động .. Tôi đã thử các trích dẫn đơn, thoát và backticks .. anh ấy không nhận tập tin. Nói rằng nó không tồn tại hoặc diễn giải ~ như thư mục chính ..
Scrrr

@scrrr Vỏ của bạn là gì?
Daniel Beck

bash. Nhưng vấn đề đã giải quyết cách inode.
Scrrr

@scrrr Vui mừng vấn đề của bạn đã được giải quyết, nhưng bây giờ tôi muốn biết lý do tại sao bash thoát không hoạt động theo cách tương tự trên hệ thống của bạn giống như trên hệ thống của tôi.
Isaac Rabinovitch

1
Cẩn thận. --chỉ dừng các đối số sau đây được hiểu là tham số - nó không ngăn shell thực hiện việc mở rộng của nó (ví dụ *), đó là những gì đang xảy ra ở đây. (Tôi biết bạn đã đề xuất nó như một giải pháp thay thế cho các tình huống khác, nhưng cảnh báo sẽ tốt.)
Bob
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.