Como renomear / extrair arquivos com nomes longos no arquivo zip

7

Eu tenho um zip que contém arquivos com nomes muito longos.

Se eu tentar extrair na linha de comando, recebo o erro "Nome do arquivo muito longo". Se eu usar o gerenciador de arquivos gráficos, ele não extrairá os arquivos e não me permitirá renomeá-los. O mesmo problema ocorre se eu montar o arquivo.

Eu posso extrair e renomear arquivos individualmente usando:

unzip -p -c example.zip "long file name.ogg" > shortname.ogg

Isso é impraticável com muitos arquivos.

Existe uma ferramenta que trunca nomes de arquivos à medida que são extraídos?

    
por Terence Eden 14.05.2017 / 12:21

1 resposta

7

Para extrair

Podemos usar zipinfo como parte deste processo, é um programa de zip package.

zipinfo -2 example.zip

mostrará apenas os nomes dos arquivos em example.zip , algo parecido com:

file1-long-name-...-bla-bla.html
file2-long-name-...-bla-bla.html

para que possamos usar esse recurso para extrair todos os arquivos:

zipinfo -2 example.zip | while read i;
do
  long_fname=${i%.*}
  unzip -p -c example.zip "$i" > "${long_fname:0:250}.${i##*.}"
done;
  • long_fname=${i%.*} : Remove a extensão do nome do arquivo longo, portanto, no caso do nome do arquivo ser menor que 256 caracteres; Não vamos conseguir uma extensão duplicada.
  • ${long_fname:0:250}.${i##*.} : Cria um novo nome de arquivo com número legítimo de caractere e também adiciona . e extensão real do arquivo.

Simplesmente estamos fazendo um loop na lista de arquivos e extraímos cada um deles com um novo nome de arquivo legítimo que tem 256 caracteres.

Para renomear

Você pode usar o comando zipnote , que também faz parte do pacote zip .

Obtenha um backup do seu arquivo zip primeiro.

Execute este comando:

zipnote example.zip > names

Abra nomes usando um editor, é assim:

@ file name long in zip and a lot of other strings in the file name
@ (comment above this line)
@ (zip file comment below this line)

Adicione novos nomes de arquivo como este:

@ file name long in zip and a lot of other strings in the file name
@=new short name for above file
@ (comment above this line)
@ (zip file comment below this line)

Em seguida, para renomear os arquivos, use:

zipnote -w example.zip < names

Você renomeou todos eles, você também pode escrever um script simples que faz isso automaticamente para você.

    
por Ravexina 14.05.2017 / 12:26