Câu trả lời:
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.
-delete
thay 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.
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ừ.
rm ./~
, với cùng lý do bạn đã nói
./~
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.
./~
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".
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 -- -i
xó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.
--
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.)