Belirli bir adlandırma kuralına sahip bir çift dosyayı sıkıştırmak nasıl?


1

Çeviri dosyalarına benzer bir klasörde var

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

Şimdi tüm dillerin xx_XX.zip gibi bir zip dosyasında ayrılmasını istiyorum.

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

Tek bir komutla oldukça basit:

zip xx_XX.zip *-xx_XX.*

ama hepsini otomatik olarak almanın bir yolunu arıyorum.

Dikkate alınması gereken bazı şeyler:

  • Bu klasörde başka dosya yok
  • bazı diller formatta domain-xx
  • bazı diller formatta domain-xx_XX

Hangi işletim sistemi? Hangi kodlama dili? Bir Windows toplu iş dosyasını kullanarak bir cevap verdim;)
DavidPostill

Yanıtlar:


1

Böyle bir şey işe yarayabilir:

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

.zipDosyaların dizinde bulunmadığından emin olun veya dizin listesinden --ignore .zipçıkardıktan sonra ekleyin ls.


1

Tüm dillerin xx_XX.zip adlı bir zip dosyasında ayrılmasını istiyorum

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

Windows'ta aşağıdaki toplu iş dosyasını kullanın (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

Örnek çıktı:

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

Daha fazla okuma

  • Windows CMD komut satırının AZ Dizini - Windows cmd satırının ilgili olduğu her şey için mükemmel bir referans.
  • enabledelayedexpansion - Delayed Expansion, değişkenlerin ayrıştırma zamanı yerine yürütme sırasında genişletilmesine neden olur.
  • for / f - Başka bir komutun sonuçlarına karşı döngü komutu.
  • parameters - Bir komut satırı argümanı (veya parametresi), bir toplu iş komut dosyasına iletilen herhangi bir değerdir.
  • set - CMD ortam değişkenlerini görüntüleyin, ayarlayın veya kaldırın. SET ile yapılan değişiklikler sadece geçerli CMD oturumu süresince kalacaktır.
  • değişkenler - Değişkenin bir kısmını ayıklayın (alt dize).
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.