จะ zip ไฟล์ด้วยวิธีการตั้งชื่อที่เฉพาะเจาะจงได้อย่างไร


1

ฉันมีไฟล์แปลในโฟลเดอร์ที่คล้ายกับ

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

ตอนนี้ฉันต้องการให้ทุกภาษาคั่นด้วยไฟล์ซิปชื่อ xx_XX.zip เช่นกัน

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

ด้วยคำสั่งเดียวมันค่อนข้างง่าย:

zip xx_XX.zip *-xx_XX.*

แต่ฉันกำลังค้นหาวิธีที่จะทำให้พวกเขาทั้งหมดโดยอัตโนมัติ

บางสิ่งที่ควรพิจารณา:

  • ไม่มีไฟล์อื่นในโฟลเดอร์นี้
  • บางภาษามีรูปแบบ domain-xx
  • บางภาษามีรูปแบบ domain-xx_XX

ระบบปฏิบัติการอะไร ภาษาสคริปต์อะไร ฉันให้คำตอบโดยใช้ไฟล์แบตช์ Windows;)
DavidPostill

คำตอบ:


1

บางสิ่งเช่นนี้อาจใช้งานได้:

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

แค่ให้แน่ใจว่าคุณไม่มี .zip ไฟล์ที่มีอยู่แล้วในไดเรกทอรีหรือเพิ่ม --ignore .zip หลังจาก ls เพื่อลบออกจากรายการไดเรกทอรี


1

ฉันต้องการให้ทุกภาษาแยกกันในไฟล์ zip ชื่อ xx_XX.zip ดังนี้

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 ให้ใช้ไฟล์แบตช์ต่อไปนี้ (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

ตัวอย่างผลลัพธ์:

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

อ่านเพิ่มเติม

  • ดัชนี A-Z ของบรรทัดคำสั่ง Windows CMD - การอ้างอิงที่ยอดเยี่ยมสำหรับทุกสิ่งที่เกี่ยวข้องกับ Windows cmd line
  • enabledelayedexpansion - การขยายเวลาที่ล่าช้าจะทำให้ตัวแปรขยายตัวในเวลาดำเนินการแทนเวลาแจง
  • สำหรับ / f - คำสั่งวนซ้ำกับผลลัพธ์ของคำสั่งอื่น
  • พารามิเตอร์ - อาร์กิวเมนต์บรรทัดคำสั่ง (หรือพารามิเตอร์) คือค่าใด ๆ ที่ส่งผ่านไปยังสคริปต์ชุดงาน
  • ชุด - แสดงตั้งค่าหรือลบตัวแปรสภาพแวดล้อม CMD การเปลี่ยนแปลงที่ทำกับ SET จะยังคงอยู่เฉพาะช่วงเวลาของเซสชัน CMD ปัจจุบัน
  • ตัวแปร - แยกส่วนของตัวแปร (สตริงย่อย)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.