Como compactar um par de arquivos com uma convenção de nomenclatura específica?

1

Eu tenho arquivos de tradução em uma pasta semelhante a

domain-cs_CZ.mo
domain-cs_CZ.po
domain-da_DK.mo
domain-da_DK.po
domain-de_DE.mo
domain-de_DE.po
...

Agora eu gostaria de ter todos os idiomas separados em um arquivo zip chamado xx_XX.zip como

domain-cs_CZ.mo
domain-cs_CZ.po => cs_CZ.zip

domain-da_DK.mo
domain-da_DK.po => dk_DK.zip

domain-de_DE.mo
domain-de_DE.po => de_DE.zip

Com um único comando, é bem simples:

zip xx_XX.zip *-xx_XX.*

mas estou procurando uma maneira de obtê-los automaticamente.

Algumas coisas a considerar:

  • Não há outros arquivos nesta pasta
  • alguns idiomas têm o formato domain-xx
  • alguns idiomas têm o formato domain-xx_XX
por Xaver 15.02.2016 / 10:20

2 respostas

1

Algo parecido com isso pode funcionar:

ls | sed 's/.*/& &/;s/domain-//;s/... /.zip /' | xargs -n2 zip

Apenas certifique-se de não ter arquivos .zip no diretório ou adicione --ignore .zip após ls para removê-los da lista de diretórios.

    
por 15.02.2016 / 12:21
1

Eu gostaria que todos os idiomas fossem separados em um arquivo zip chamado xx_XX.zip da seguinte forma

domain-cs_CZ.mo
domain-cs_CZ.po => cs_CZ.zip

domain-da_DK.mo
domain-da_DK.po => dk_DK.zip

domain-de_DE.mo
domain-de_DE.po => de_DE.zip

No Windows, use o seguinte arquivo de lote (test.cmd):

@echo off
setlocal
setlocal enabledelayedexpansion
rem get a list of unique filenames
for /f "usebackq" %%f in ('dir /b domain-*.*') do (
  set _file=%%~nf
  echo !_filelist! | find "!_file!" > nul
  rem if true we have a new name, strip off domain- (1st 7 chars) and save to a file to process later
  if not !errorlevel! == 0 set "_filelist=!_filelist!!_file! " && echo !_file:~7!>>files.txt
  )
rem process the list
for /f %%f in (files.txt) do (
  zip %%f.zip *%%f.*
  )
rem tidy up
del files.txt
endlocal

Exemplo de saída:

F:\test>dir domain-*.*
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

15/02/2016  10:48                 0 domain-cs_CZ.mo
15/02/2016  10:49                 0 domain-cs_CZ.po
15/02/2016  10:49                 0 domain-da_DK.mo
15/02/2016  10:49                 0 domain-da_DK.po
15/02/2016  10:49                 0 domain-de_DE.mo
15/02/2016  10:49                 0 domain-de_DE.po
               6 File(s)              0 bytes
               0 Dir(s)  1,774,192,197,632 bytes free

F:\test>test
zip cs_CZ.zip *cs_CZ.*
zip da_DK.zip *da_DK.*
zip de_DE.zip *de_DE.*

Leitura Adicional

  • Um índice A-Z da linha de comando do Windows CMD - Uma excelente referência para todas as coisas relacionadas à linha do Windows cmd.
  • enabledelayedexpansion - Expansão com atraso fará com que as variáveis sejam expandidas em tempo de execução e não no tempo de análise.
  • para / f - Comando Loop contra os resultados de outro comando.
  • parâmetros - Um argumento de linha de comando (ou parâmetro) é qualquer valor passado para um script em lote.
  • definir - Exibir, definir ou remover variáveis de ambiente do CMD. As alterações feitas com o SET permanecerão apenas pela duração da sessão atual do CMD.
  • variáveis - Extrai parte de uma variável (substring).
por 15.02.2016 / 13:01

Tags