copie nomes de arquivos com caracteres especiais para um volume ntfs externo

3

Estou tentando copiar a pasta Documents and Settings de um sistema Windows XP para um disco externo NTFS usando um USB Live of Puppy Linux.

Encontrei um problema de codificação para arquivos de nomes nos quais o sistema não reconhece caracteres especiais italianos (parte de utf-8) para que usar cp ou o gerenciador de arquivos da GUI traga o erro invalid or incomplete multibyte or wide character .

Como posso copiar os arquivos cujos nomes incluem os caracteres especiais para a unidade NTFS?

    
por maja 17.08.2014 / 13:49

2 respostas

4

Tem certeza de que os nomes dos arquivos são válidos no sistema de arquivos NTFS?

Você exige que os nomes dos arquivos permaneçam os mesmos?

Se não, você pode remover os caracteres "estranhos" para facilitar sua vida:

Existe uma ferramenta para isso, detox .

Você pode verificar o que seria renomeado sem alterar os nomes dos arquivos primeiro:

$ detox -n somedir/*

E, na verdade, faça isso:

$ detox somedir/*


Outra abordagem é montar o sistema de arquivos NTFS de uma maneira que limpe ('sanitize') os próprios nomes dos arquivos.

Existe uma opção de montagem para ativar isso, windows_names :

De man ntfs-3g :

  windows_names
              This option prevents files, directories and extended  attributes
              to be created with a name not allowed by windows, either because
              it contains some not  allowed  character  (which  are  the  nine
              characters  "  * / : < > ? \ | and those whose code is less than
              0x20) or because the  last  character  is  a  space  or  a  dot.
              Existing such files can still be read (and renamed).
    
por 17.08.2014 / 16:16
1

O rsync tem uma opção para alterar nomes de arquivos para se ajustarem ao sistema de arquivos de destino. da página man:

--iconv=CONVERT_SPEC

Rsync can convert filenames between character sets using this option. Using a CONVERT_SPEC of "." tells rsync to look up the default character-set via the locale setting. Alternately, you can fully specify what conversion to do by giving a local and a remote charset separated by a comma in the order --iconv=LOCAL,REMOTE, e.g. --iconv=utf8,iso88591. This order ensures that the option will stay the same whether you’re pushing or pulling files.

Tente

rsync --iconv=. --archive /source /destination 

Ou para especificar que o sistema de arquivos local é ISO-8859-1,

rsync --iconv=ISO-8859-1,. --archive /source /destination

Eu não consegui descobrir como ele decide qual sistema de arquivos é a origem e qual é o destino quando tenho as duas unidades montadas localmente. Mas esta é a maneira que funcionou para mim.

    
por 05.02.2018 / 05:50

Tags