Unrar criando arquivos com barras invertidas em nomes em vez de hierarquia de diretórios apropriada

4

Estou trabalhando para mover o conteúdo de um site, que foi fornecido para mim em um arquivo RAR, para um novo servidor.

Eu não sei exatamente qual sabor do Linux é; uname -a me diz:

Linux bolt.sonic.net 2.4.37.5 #1 SMP Mon Aug 17 10:15:36 PDT 2009 i686 unknown

e unrar --help me dizem:

UNRAR 3.00 freeware      Copyright (c) 1993-2002 Eugene Roshal

Eu não sou usuário comum do unrar, mas na minha limitada experiência anterior, o comando simples unrar x archive.rar sempre fez a coisa certa, tanto quanto me lembro.

Mas quando tento descompactar o arquivo atual, o resultado é um diretório estruturado em tela contendo 4500 arquivos e diretórios ímpares cujos nomes têm barras invertidas nos locais em que os separadores de diretórios devem estar, por exemplo:

drwxr-xr-x    2 yoyodyne user         4096 Jan 18 14:53 yoyodyne
drwxr-xr-x    2 yoyodyne user         4096 Jan 18 14:53 yoyodyne\application
drwxr-xr-x    2 yoyodyne user         4096 Jan 18 14:53 yoyodyne\application\config
-rw-r--r--    1 yoyodyne user         2765 Sep 15  2011 yoyodyne\application\config\database.php
-rw-r--r--    1 yoyodyne user         1152 Sep 15  2011 yoyodyne\application\config\doctypes.php
-rw-r--r--    1 yoyodyne user         1844 Sep 15  2011 yoyodyne\application\config\foreign_chars.php
-rw-r--r--    1 yoyodyne user          513 Sep 15  2011 yoyodyne\application\config\hooks.php
-rw-r--r--    1 yoyodyne user          123 Sep 15  2011 yoyodyne\application\config\index.html
...

Eu estou completamente perdido para entender o que está causando isso, ou como contornar isso. Eu não estou vendo nenhuma opção óbvia no comando unrar que diz isso, por exemplo, "Ei, estou em um sistema Linux", ou "Ei, ignore o fato de que esse arquivo foi criado em um sistema Windows. "

(Na verdade, não sei se o arquivo foi criado em um sistema Windows ou não. O desenvolvedor que me enviou o arquivo não disse, e prontamente saiu de férias imediatamente depois - o que significa que minhas chances de obter uma resposta, ou um arquivo de substituição em um formato diferente, são escassas.)

Por que vale a pena, o programa unrar parece entender que a parte do nome após a última barra invertida é o nome do arquivo real. A parte da saída de unrar l archive.rar correspondente à lista parcial de diretórios acima é:

 Name             Size   Packed Ratio  Date   Time     Attr      CRC   Meth Ver
-------------------------------------------------------------------------------
 database.php     2765     1071  38% 15-09-11 10:57   .....A   13CDB2C8 m3g 2.9
 doctypes.php     1152      381  33% 15-09-11 10:57   .....A   F25E706F m3g 2.9
 foreign_chars.php     1844      856  46% 15-09-11 10:57   .....A   12AF75FD m3g 2.9
 hooks.php         513      285  55% 15-09-11 10:57   .....A   4029E30E m3g 2.9
 index.html        123      107  86% 15-09-11 10:57   .....A   E8DFAEB4 m3g 2.9
 ...
 config              0        0   0% 18-01-13 14:53   .D....   00000000 m0  2.0
 ...
 application         0        0   0% 18-01-13 14:53   .D....   00000000 m0  2.0
 ...

Então, considerando isso, e dado que o programa unrar está sendo executado em um sistema Linux, por que ele está criando esses nomes de arquivos malucos? E o que posso fazer sobre isso?

    
por Hephaestus 01.02.2013 / 01:25

1 resposta

0

Eu não sei a solução para o unrar em si, mas se você puder executar vidir e se você conseguir descompactar o conteúdo do arquivo como um diretório estruturado em plano, então é isso que você pode tentar convertê-lo em uma árvore de diretórios:

# cd to the directory
find . | sort | vidir -

Isso abrirá seu editor de texto. Use seus recursos para substituir cada \ por / e salve o arquivo sem alterar seu caminho (é um arquivo temporário). vidir moverá arquivos e diretórios para seus novos caminhos, criando a árvore de diretórios desejada.

Notas:

  • Caracteres extravagantes em nomes de arquivos não são suportados, vidir espera entrada textual com novas linhas padrão como separadores de entrada (não funcionará com find . -print0 ou sort -z ).
  • Usei sort para garantir que cada linha que represente um diretório preceda seu conteúdo. É importante porque vidir criará diretórios ausentes ao mover um objeto para seu novo caminho. Mover o diretório original mais tarde geraria um conflito de nomes resolvível com ~ suffix, você não deseja isso. Você deseja mover o diretório antes de seu conteúdo, portanto, sort .
  • Defina $EDITOR para que vidir use o editor de texto de sua escolha (por exemplo, EDITOR=vi vidir ).
  • Você pode tentar a abordagem experimental de minha outra resposta para substituir os caracteres automaticamente, sem jogando no editor de texto à mão. No seu caso, o comando será:

    find . | sort | EDITOR='sed -i s|\|/|g' vidir -
    
por 05.06.2018 / 13:29

Tags