Eu tenho um zip que contém arquivos com nomes muito longos.
Se eu tentar extrair na linha de comando, recebo o erro "O nome do arquivo é muito longo".
Se eu usar o gerenciador de arquivos gráficos, ele não extrairá os arquivos e não permitirá que eu os renomeie. 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 truncará nomes de arquivos à medida que são extraídos?
unzip -l <ARCHIVE>
e como você deseja que os nomes sejam truncados? Deseja manter a estrutura de diretórios dentro do arquivo morto durante a extração?Respostas:
Extrair
Podemos usar
zipinfo
como parte desse processo, é um programa dozip
pacote.mostrará apenas os nomes dos arquivos
example.zip
, algo parecido com:para que possamos usar esse recurso para extrair todos os arquivos:
long_fname=${i%.*}
: Remove a extensão do nome do arquivo longo; portanto, no caso de o nome do arquivo ter menos de 256 caracteres; Não vamos obter uma extensão duplicada.${long_fname:0:250}.${i##*.}
: Cria um novo nome de arquivo com número legítimo de caracteres e também adiciona uma.
extensão real e arquivo.Simplesmente entramos na lista de arquivos e extraímos cada um deles com um novo nome de arquivo legítimo, com 256 caracteres.
Renomear
Você pode usar o
zipnote
comando, também faz parte dozip
pacote.Faça um backup do seu arquivo zip primeiro.
Execute este comando:
Abra nomes usando um editor, é assim:
Adicione novos nomes de arquivos como este:
Para renomear arquivos, use:
Você renomeou todos eles, também pode escrever um script simples que faça isso automaticamente para você.
fonte
IFS= read -r i
no caso de os nomes dos arquivos começarem com espaço em branco ou conter itens que o shell possa interpretar como seqüências de escape.