Extraia arquivos zip no diretório com base no padrão do nome zip

Extraia arquivos zip no diretório com base no padrão do nome zip

Eu tenho esses arquivos zip:

PLP_633555_2015-03-04_01-12-01.zip
PLP_634562_2004-03-02_02-15-07_UBIC.zip
PLP_563462_2008-05-02_01-21-03_UBIC_STOC.zip

E preciso que cada zip seja extraído em seu diretório apropriado com este formato (basicamente, preciso apenas dos primeiros 30 caracteres):

PLP_633555_2015-03-04_01-12-01
PLP_634562_2004-03-02_02-15-07
PLP_563462_2008-05-02_01-21-03

Este é o comando que tenho atualmente, que funciona mas apenas para o segundo arquivo zip (PLP_634562_2004-03-02_02-15-07_UBIC.zip)

for f in /PLP*.zip; do n=$(echo $f | cut -f 1-5 -d '_'); unzip -d $n $f;done

Gostaria de alterá-lo para que leia apenas os primeiros 30 caracteres do arquivo zip e depois crie o diretório com base nisso. Isso garantirá que qualquer novo formato de nomenclatura de arquivo zip funcione no futuro.

Eu tentei mudar a parte da variável n do comando para isso

n=$(echo ${f:0:30}); 

mas isso não funcionou. Estou usando o Linux bash.

Responder1

Com sedvocê pode obter os primeiros 30 caracteres:

sed 's|\(.\{30\}\).*|\1|'

e use isso em vez de cutno seu forloop.

O detalhamento dessa sedsubstituição é que o que corresponde entre \( \)você substitui por \1. o {30}(escapado com \) conta 30 caracteres únicos ( .).

Responder2

Obrigado por todas as sugestões, peguei pedaços das sugestões de todos e construí este comando. No meu caso, este é exatamente o comando que eu solicitei.

for f in /mydirectory/*.zip; do
   n=$(echo ${f##*/} | cut -c1-30);
   unzip -d /mydirectory/$n $f;
done
  • Ele percorre todos os arquivos zip
  • Ecoa cada arquivo zip (apenas o nome do arquivo, nenhuma informação extra como tamanho ou caminho é exibida) e então mostra apenas os primeiros 30 caracteres e os armazena em n variáveis
  • Em seguida, ele extrai o conteúdo para um novo diretório (usando n variáveis) para cada arquivo zip.

No meu caso, coloquei isso em um script que roda em outro diretório.

informação relacionada