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

1

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 eu preciso de cada zip extraído em seu diretório apropriado com este formato (basicamente, eu só preciso 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, o qual funciona 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

Eu gostaria de alterá-lo para que ele leia apenas os primeiros 30 caracteres do arquivo zip e crie o diretório com base nele. Isso garantirá que qualquer novo formato de nomenclatura de arquivo zip funcionará 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 bash do Linux.

    
por LatinCanuck 19.05.2016 / 21:42

2 respostas

1

Com sed você pode obter os primeiros 30 caracteres:

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

e use isso em vez de cut no seu loop for .

O detalhamento dessa substituição de sed é o que corresponde a \( \) que você substitui por . o {30} (com escape de \ ) conta 30 caracteres únicos ( . ).

    
por 19.05.2016 / 21:52
0

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

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

No meu caso, coloco isso em um script que é executado em outro diretório.

    
por 24.05.2016 / 17:31