Wie kann ich ein Dateipaar mit einer bestimmten Namenskonvention komprimieren? - Postleitzahl

Ich habe Übersetzungsdateien in einem Ordner ähnlich dem

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

Jetzt möchte ich alle Sprachen in einer zip-Datei namens xx_XX.zip wie getrennt haben

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

Mit einem einzigen Befehl ist es ziemlich einfach:

zip xx_XX.zip *-xx_XX.*

aber ich bin auf der Suche nach einem Weg, um sie alle automatisch zu bekommen.

Einige Dinge zu beachten:

  • In diesem Ordner befinden sich keine weiteren Dateien
  • Einige Sprachen haben das Format domain-xx
  • Einige Sprachen haben das Format domain-xx_XX

Antworten:

1 f√ľr Antwort ‚ĄĖ 1

So etwas könnte funktionieren:

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

Seien Sie nur sicher, dass Sie nicht haben .zip Dateien bereits im Verzeichnis oder hinzuf√ľgen --ignore .zip nach ls um sie aus der Verzeichnisliste zu entfernen.


1 f√ľr Antwort ‚ĄĖ 2

Ich möchte, dass alle Sprachen in einer Zip-Datei mit dem Namen xx_XX.zip wie folgt getrennt werden

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

Verwenden Sie unter Windows die folgende Batchdatei (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

Beispielausgabe:

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

Weitere Lekt√ľre

  • Ein A-Z-Index der Windows CMD-Befehlszeile - Eine hervorragende Referenz f√ľr alle Dinge, die mit der Windows-cmd-Linie zu tun haben.
  • Aktiviertverz√∂gerteErweiterung - Die verz√∂gerte Erweiterung bewirkt, dass Variablen zur Ausf√ľhrungszeit und nicht zur Analysezeit erweitert werden.
  • f√ľr / f - Schleifenbefehl gegen die Ergebnisse eines anderen Befehls.
  • Parameter - Ein Befehlszeilenargument (oder -parameter) ist ein beliebiger Wert, der an ein Stapelskript √ľbergeben wird.
  • einstellen - Anzeigen, Setzen oder Entfernen von CMD-Umgebungsvariablen. Mit SET vorgenommene √Ąnderungen bleiben nur f√ľr die Dauer der aktuellen CMD-Sitzung erhalten.
  • Variablen - Teil einer Variablen extrahieren (Teilstring).