Làm thế nào để xóa một tập tin với một tên lạ?


33

Tôi đã viết một chương trình sử dụng chức năng ánh xạ bộ nhớ POSIX ( mmap)

Chương trình lấy một tệp ( a.dat) và ánh xạ bộ nhớ để đọc / ghi.

Do lỗi trong chương trình, mỗi khi tôi chạy chương trình, một tệp có một số tên lạ (ví dụ ?d?P?^z??d?P?^z?:) được tạo. Lỗi được giải quyết nhưng tôi không thể xóa các tập tin.

Tôi không thể xóa nó bằng dòng lệnh hoặc bằng cách chọn / xóa từ trình quản lý cửa sổ.

Vậy tôi nên xóa nó như thế nào? Tôi đang sử dụng Ubuntu 11.04.


1
Ngay cả khi bạn không thể dễ dàng nhập tên tệp, xóa nó khỏi trình quản lý tệp đồ họa sẽ hoạt động tốt. lỗi gì bạn nhận được?
Thomas

2
@Aditya, tôi không gặp vấn đề gì khi xóa các tệp như vậy khỏi dòng lệnh khi thoát tên của chúng bằng dấu ngoặc đơn ( rm '?d?P?^z??d?P?^z?'). Bạn đã thử chưa?
Frédéric Hamidi

xóa khỏi trình quản lý cửa sổ đồ họa chỉ nói không thể xóa tập tin 'tên tệp'. @ Frédéric Hamidi Cảm ơn bạn đã giúp tôi xóa một tập tin. Nhưng một cái khác có tên '? M? P ???)? M? P ???)' không bị xóa ... Thông báo lỗi cho biết "rm: không thể xóa`? M? P ???)? M ? P ???) ': Không có tệp hoặc thư mục như vậy "
AK

1
@Aditya, tệp khác đó phải có các ký tự không in được trong tên của nó. Hãy thử các bước sau: 1 / Di chuyển tất cả các tệp hợp lệ ra khỏi thư mục đó, 2 / Vấn đề rm *bên trong thư mục.
Frédéric Hamidi

1
Khi nhập tên tệp, hãy thử bắt đầu bằng dấu ngoặc kép, sau đó sử dụng hoàn thành tự động ngay khi nó hoạt động (sau một hoặc hai ký tự). Tự động hoàn thành sẽ nhấn phím [tab] để tự động hoàn thành tên. Bằng cách này, bạn có thể thành công hơn để thoát khỏi tên chính xác.

Câu trả lời:


45

rm -i -- *sẽ nhắc bạn xóa từng tập tin. Bạn có thể và nên thay đổi '*' thành một kết quả hẹp hơn nếu có nhiều tệp. Các --tùy chọn dừng xử lý, do đó, một tệp có tên -dsẽ được xóa rmthành công.

Tôi đã sử dụng nó trong quá khứ và nó hoạt động cho đến khi bạn nhấn một ký tự đặc biệt hoặc 2 mà nó không thích.


1
Điều này không làm việc cho một tập tin có tên -d chẳng hạn.
SCO

2
@SCO Nếu nó không phù hợp với bạn và tùy thuộc vào phiên bản của rmbạn, bạn có thể làm rm -i -- * Điều đó --nói với một số phiên bản của rm, không có thêm dòng chuyển đổi dòng lệnh nào sau --và coi các đối số tiếp theo là tên tệp.
JimR

1
Tôi nghĩ rằng câu trả lời này nên bao gồm nhận xét được đề xuất bởi @JimR: Sử dụng --trong rmlệnh.
Felipe Alvarez

16

bạn có thể sử dụng ls -liđể hiển thị tất cả các tệp bằng inode của chúng. Sau đó chạy lệnh này để xóa tệp:

find . -inum ${INODE_NUM} -delete

Tôi đã thêm vào -maxdepth 1tìm thấy của tôi để được an toàn:

find . -maxdepth 1 -inum ${INODE_NUM} -delete

1
Nói đúng ra ls -ilà đủ tốt rồi.
Scott

lskhông xóa các tập tin. OP muốn điều này.
Felipe Alvarez

4
Dòng đầu tiên trong câu trả lời của bạn cho biết, bạn có thể sử dụng ls -liđể hiển thị tất cả các tệp theo chế độ inode của họ. Tôi đang chỉ ra rằng ls -inó đủ tốt để có được danh sách tên tệp và số inode tương ứng của chúng. (Nhưng tất nhiên bạn cần ls -ianếu bạn muốn bao gồm các tệp dấu chấm.)
Scott

Tốt hơn là chỉ cần chuyển -deletetùy chọn sang find, để giảm thiểu việc sử dụng tên tệp sai.
ScumCoder
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.