Come comprimere una coppia di file con una convenzione di denominazione specifica?


1

Ho file di traduzione in una cartella simile 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
...

Ora vorrei avere tutte le lingue separate in un file zip chiamato xx_XX.zip come

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

Con un solo comando è abbastanza semplice:

zip xx_XX.zip *-xx_XX.*

ma sto cercando un modo per ottenerli tutti automaticamente.

Alcune cose da considerare:

  • Non ci sono altri file in questa cartella
  • alcune lingue hanno il formato domain-xx
  • alcune lingue hanno il formato domain-xx_XX

Quale sistema operativo? Quale linguaggio di scripting? Ho fornito una risposta utilizzando un file batch di Windows;)
DavidPostill

Risposte:


1

Qualcosa del genere potrebbe funzionare:

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

Assicurati solo che non ci siano .zipgià file nella directory o aggiungili --ignore .zipdopo lsper rimuoverli dall'elenco delle directory.


1

Vorrei che tutte le lingue fossero separate in un file zip chiamato xx_XX.zip come segue

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

Su Windows, utilizzare il seguente file batch (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

Esempio di output:

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.*

Ulteriori letture

  • Un indice AZ della riga di comando CMD di Windows - Un riferimento eccellente per tutte le cose relative alla riga cmd di Windows.
  • enabledelayedexpansion - L'espansione ritardata comporterà l'espansione delle variabili al momento dell'esecuzione piuttosto che al momento dell'analisi.
  • for / f - Comando loop contro i risultati di un altro comando.
  • parametri - Un argomento (o parametro) della riga di comando è qualsiasi valore passato in uno script batch.
  • set - Visualizza, imposta o rimuove le variabili di ambiente CMD. Le modifiche apportate con SET rimarranno solo per la durata della sessione CMD corrente.
  • variabili : estrae parte di una variabile (sottostringa).
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.