Điều quan trọng là phải hiểu rằng đây không phải là loại "tham nhũng hệ thống tập tin" fsck
sẽ giúp với. Theo như hệ thống tập tin, tên tệp có thể là bất kỳ chuỗi byte nào , miễn là không có byte nào có giá trị 0x00 (ASCII NUL, điểm đánh dấu kết thúc chuỗi C) hoặc 0x2F ( /
, dấu phân cách thư mục). (Nếu một tên tệp bằng cách nào đó có được một byte 00 hoặc 2F được nhúng bên trong nó, fsck
thì nên sửa nó.)
Thay vào đó, những gì bạn có là tên tệp mà phần mềm ứng dụng (Cá heo ls
) nghĩ rằng có chứa các ký tự không thể hiển thị trong "ngôn ngữ" của bạn, do đó, nó sẽ thay thế chúng bằng các ký tự giữ chỗ. Bạn cũng không thể nhập các ký tự đó, do đó thao tác với các tệp khó hơn, nhưng bạn có thể làm điều đó miễn là bạn làm mà không cần phải gõ hoặc sao chép và dán tên. Ví dụ: nếu bạn xóa hoặc đổi tên các tệp vấn đề trực tiếp từ bên trong Cá heo, thì nó sẽ hoạt động (Tôi sẽ nói rằng nếu nó không hoạt động, đó là một lỗi trong Cá heo).
Nếu bạn cần làm gì đó với chúng từ shell (ví dụ: nếu chúng được sở hữu bởi root
và do đó không thể được sửa đổi bởi chương trình GUI), bạn có thể đặt tên chúng một cách gián tiếp bằng cách sử dụng các mẫu "global", sẽ được mở rộng theo đúng trình tự (s) byte và được truyền cùng.
Tất nhiên, bây giờ, bạn sẽ không muốn xóa nội dung một cách tình cờ vì mẫu hình cầu của bạn khớp quá nhiều, vì vậy khuyến nghị của tôi là sử dụng rename
tiện ích Perl để chuyển đổi từng tên tệp thành mã hóa hex:
$ rename '$_ = unpack("H*", $_)' *
Điều này không phá hủy bất kỳ thông tin nào - không phải chính tệp đó, cũng không có nghĩa gì ban đầu được mã hóa trong tên tệp trước khi bị xáo trộn. Nó có thể được hoàn tác cho các tập tin cụ thể với ví dụ
$ rename '$_ = pack("H*", $_)' 696d706f7274616e742e646f63
Chú ý: có hai chương trình được đặt tên rename
, từ các nguồn gốc khác nhau; các lệnh trên sẽ chỉ hoạt động với lệnh khởi tạo với Perl. Trong Ubuntu, cái bạn muốn là cái từ gói "đổi tên", không phải cái từ gói "produc-linux". rename -h
sẽ phân biệt: đây là những gì bạn muốn ...
$ rename -h
Usage:
rename [ -h|-m|-V ] [ -v ] [ -n ] [ -f ] [ -e|-E perlexpr]*|perlexpr
[ files ]
# ...
... đây không phải điều bạn muốn ...
$ rename -h
Usage:
rename [options] <expression> <replacement> <file>...
# ...
Điều quan trọng để tìm kiếm là "perlexpr". Bạn có thể có một phiên bản cũ hơn của việc đổi tên Perl mà không hiểu tất cả các tùy chọn ở trên, nhưng lệnh tôi đã hiển thị vẫn hoạt động.
Chỉnh sửa: Dưới 14.04 .5 tập lệnh perl được bao gồm rename
không hỗ trợ chuyển đổi -h. Bạn có thể xác nhận bạn có đúng trang bằng cách kiểm tra trang man của nó man rename
trong trường hợp nào dòng trên cùng sẽ chứa:
RENAME (1) Hướng dẫn tham khảo cho lập trình viên Perl RENAME (1)