Đổi tên tập tin với tên lạ trên mount Samba


10

Tôi muốn đổi tên tập tin với tên lạ thành một cái gì đó hợp lý, tuy nhiên tôi không thể: /

$ mv *_000c.jpg 000c.jpg
mv: cannot move '?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Tôi đã thử sử dụng số inode như được đề xuất ở một vài nơi trên internet:

$ ls -il *000c.jpg
ls: '?j?Z?R?C1_000c.jpg': No such file or directory
213915 -rw-r--r-- 1 wolf wolf 794655 Jul 21  2012 '?j?Z?R?C1_000c.jpg'
$ find . -inum 213915 -print0 | xargs -0 -I '{}' mv '{}' 000c.jpg
mv: cannot move './?j?Z?R?C1_000c.jpg' to '000c.jpg': No such file or directory

Tôi nên làm gì?


1
Đầu ra của một đơn giản lstrong thư mục đó là gì? Là tập tin được hiển thị như một tập tin thông thường? Tôi đang yêu cầu đảm bảo rằng đó No such file or directorylà lỗi toàn cầu và không phải là dấu hiệu của hệ thống tệp bị hỏng.
terdon

1
Tôi tự hỏi nếu hệ thống tập tin cần phải được chạy qua fsck? Tôi có thể bị hỏng. Làm thế nào các tập tin có được tên đó?
Kusalananda

1
@Mioriin Các dấu hỏi trong tên tệp là (hoặc có thể là) giữ chỗ cho các ký tự không thể hiển thị. (một lý do để không bao giờ phân tích đầu ra của ls)
Kusalananda

1
Đây có thể là một vấn đề phông chữ thiết bị đầu cuối. Nó hiển thị ?cho các chữ cái mà nó không thể hiển thị. Hãy thử chuyển sang một phông chữ unicode đầy đủ.
Mio Rin

5
@Mioriin Việc tên tệp có thể được hiển thị hay không là một chút cá trích đỏ trong trường hợp này tôi nghĩ. Điều kỳ lạ là shell có thể mở rộng *_000c.jpgnhưng mvsau đó không thể xử lý tệp. Đây là, IMHO, biểu thị cho một hệ thống tập tin bị hỏng. ... hoặc có thể là một hệ thống tập tin được gắn trên chia sẻ mạng đã biến mất (với các mục trong thư mục vẫn được lưu trong bộ nhớ cache) hoặc một cái gì đó.
Kusalananda

Câu trả lời:


16

Tóm tắt các ý kiến ​​liên quan:

Các hệ thống tệp Unix cho phép bất kỳ ký tự nào trong một tên tệp ngoài \0(nul) và /(dấu gạch chéo về phía trước). Thực tế lscho thấy các dấu hỏi chỉ là vì nó không thể hiển thị một số ký tự của tên tệp trong ngôn ngữ hiện tại (đó là một trong những lý do tại sao bạn nên tránh phân tích cú pháp đầu rals ).

Tuy nhiên, với chia sẻ Samba, rõ ràng bạn có các yêu cầu khắt khe hơn về tên tệp so với hệ thống tệp Unix tiêu chuẩn.

Vì tệp có tên "bất hợp pháp" trên chia sẻ Samba trung gian của bạn, nên tệp không thể truy cập được bằng tên chính xác của nó trên máy gắn chia sẻ.

Công việc mvnày không hoạt động vì tên được trả về từ chia sẻ Samba cho việc mở rộng mẫu hình cầu không phải là tên thực của tệp trên hệ thống tệp lưu trữ, chỉ có phiên bản tên xéo của Samba.

Giải pháp của bạn là đăng nhập vào máy chủ thực sự lưu trữ tệp (trên hệ thống tệp có quy tắc đặt tên ít hạn chế hơn Samba) và thay đổi tên của tệp ở đó. Đây là quá trình hành động chính xác.

Xem thêm cuộc trò chuyện Unix & Linux về câu hỏi này .


-2

Trước khi tôi tìm hiểu về trích dẫn trong shell unix, tôi sẽ sử dụng diredchế độ của emacs để đổi tên hoặc xóa các tệp khó khớp. Bạn chỉ cần mở thư mục trong emacs:

emacs -q .

... Sau đó, bạn có thể sử dụng các phím mũi tên để điều hướng đến tệp bạn muốn sửa đổi và đổi tên tệp R. ?sẽ cung cấp cho bạn danh sách các lệnh có sẵn (bạn có thể xóa các tệp khó khớp quá).

Sau đó, bạn chỉ cần C-x C-cthoát khỏi emacs và bạn đã hoàn thành.


-3

Thông thường với tên tệp bất thường, bạn có thể thêm "./" trước tên tệp và Linux sẽ nhận dạng chính xác tên đó. Ví dụ: $ ls ./?j?Z?R?C1_000c.jpg

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.