xóa hoặc đổi tên tệp với \ r làm tên tệp


11

Tôi có một tập tin nhỏ phiền phức có tên là một ký tự và ký tự đó là một \r

Làm thế nào tôi có thể xóa điều này?

Đây là những gì tôi nhận được với ls -bl:

-rw-rwxr--+   1 root             snapplewriters        0 Aug 29  2011 \r

ls -l chỉ hiển thị nó "?"


Làm thế nào mà bạn thậm chí kết thúc với một tập tin có tên như vậy?
mkaito

Câu trả lời:


17

Chúng tôi ls -li để lấy số inode cho tệp (cột đầu tiên), sau đó sử dụng find để xóa nó (giả sử inode là 12345):

find . -inum 12345 -exec rm -i {} \;


Cảm ơn bạn - điều này cực kỳ hữu ích - Tôi cảm thấy như phải có một số loại tham chiếu hệ thống không rõ ràng đối với tệp nhưng không thể tìm thấy nó (dù sao cũng nhanh chóng).
Colin

1
Tùy thuộc vào phiên bản của find cài đặt, bạn cũng có thể làm find . -inum 12345 -delete
William Jackson

Đối với tôi, phiên bản càng không rõ ràng thì càng tốt. Nhưng đề nghị tốt không hơn không kém. :)
Garrett


5

Cá nhân tôi sẽ tiếp cận với Python:

>>> import os
>>> '\r' in os.listdir('.')
True
>>> os.unlink('\r')

Nhưng bạn cũng có thể làm điều này từ shell nếu bạn hiểu các ký tự thoát.

$ ls -b $'\r'
\r
$ rm -vi $'\r'
rm: remove regular empty file ‘\r’? y
removed ‘\r’

Tôi đoán bạn cũng có một chiếc búa tạ trong nhà bếp của bạn? Chỉ trong trường hợp bạn cần phải bẻ khóa một hạt? :-)
mivk

3

Một cách nhanh chóng khác để xóa một tập tin gọi là <carriage return> nếu bạn đang sử dụng shell Bash là:

$ rm <control-v><control-m>

2

Tên tệp một ký tự là không bình thường và nếu bạn không có bất kỳ tệp nào khác trong thư mục của mình, bạn có thể thử điều này:

rm ?

Tôi quá lười để tìm hiểu hoặc tìm kiếm cách trích dẫn các ký tự lạ, vì vậy tôi đã sử dụng các biến thể của điều này nhiều lần khi tôi bị mắc kẹt với các tệp có tên khó.


-1 Trận đấu này tất cả các các tệp có một tên ký tự - Xem "Mở rộng tên đường dẫn" trong man bash. Thử touch a b c d $'\r'; rm ?
l0b0

1
@ l0b0: Vâng? Như tôi đã viết, tên tệp ký tự đơn là không bình thường. Rất có khả năng là không có các tệp như vậy trong thư mục, và trong trường hợp đó, nó hoạt động. Nếu không thì "rm -i?" có thể được sử dụng.
Thomas Padron-McCarthy
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.