2012-11-08 19 views
8

Tôi gặp sự cố với một số tệp trong thiết bị đầu cuối Linux (Ubuntu), có dấu trong tên. Ví dụ:UTF-8 Tên tệp trả về Không tìm thấy trong thiết bị đầu cuối linux

$ ls dir/ 
criação.png 

Vì vậy, thiết bị đầu cuối trả về tệp đó, vì vậy nó tồn tại. Bây giờ, hãy xem liệu tệp có tồn tại hay không bằng lệnh đơn giản này:

$ [ -f criação.png ] && echo "File Exist" || echo "Not Exist" 
Not Exist 

Như bạn thấy, "Không tồn tại". Bây giờ, tôi có cùng một thư mục và tập tin trên OSX, sau đó tôi chạy lệnh tương tự và nó sẽ trả về này:

$ [ -f criação.png ] && echo "File Exist" || echo "Not Exist" 
File Exist 

tôi biết một chút về locale:

$ locale 
LANG=en_US.UTF-8 
LANGUAGE= 
LC_CTYPE=en_US.UTF-8 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

Trên Linux, " Không tồn tại ", trên OSX," File Exist "... Ai đó, biết cách sửa lỗi đó?

Có lẽ những có thể giúp:
http://nedbatchelder.com/blog/201106/filenames_with_accents.html
http://www.ruby-forum.com/topic/279105

CẬP NHẬT - Giải pháp

cuối cùng tôi đã tìm thấy một giải pháp cho vấn đề đó. Bạn cần phải đổi tên tập tin của bạn từ NFD đến NFC, đây là lệnh để sửa chữa tất cả các file:

cd dir/ 
convmv -r -i -f utf8 -t utf8 --nfc --notest . 

Nguồn: http://blog.hbis.fr/2010/08/30/macox-utf8_filenames_normalization/

+0

Vấn đề của tôi là với nginx. Ví dụ: '2012/11/08 17:05:34 [lỗi] 12102 # 0: * 128 mở()"/usr/share/nginx/www/wp-content/video tải lên/2012/09/celular-inclusão- digital.png "không thành công (2: Không có tệp hoặc thư mục nào), ứng dụng khách: 66.249.76.145, máy chủ: site.com, yêu cầu:" GET/wp-content/tải lên/2012/09/celular-inclus% C3% A3o- digital.png HTTP/1.1 ", host:" site.com "' – mateus007

+1

Giải pháp là chính xác (MacOS sử dụng NFD nhưng khá nhiều thứ khác sử dụng NFC, gây ra các vấn đề tương thích khi MacOS có liên quan), nhưng bạn nên đăng nó như một câu trả lời . Câu trả lời của bạn chính xác hơn câu trả lời bạn đã chấp nhận! – Celada

+0

'convmv -r -f iso8859-1 -t utf8 --nfc - không nhất. ' Nó sửa tên tập tin của tôi với giọng được tải lên bởi SFTP từ Windows sang Linux. –

Trả lời

1

Một trong những lý do có thể là tên file sử dụng một hình thức unicode bình thường khác nhau các ký tự có dấu kết hợp hơn so với bạn sử dụng để nhập tên. Xem Unicode Equivalence.

+0

Vâng, tôi đã thử một số lệnh, sau đó tôi đã tìm thấy một "mẹo" để làm việc: 'mv criac <0327> a <0303> o.png criação.png' Bây giờ tệp tồn tại. Có điều gì đó về NFC e NFD – mateus007