จะแบ่งไฟล์ขนาดใหญ่ออกเป็นส่วนย่อย ๆ ได้อย่างไร?


189

ฉันมีไฟล์ขนาดใหญ่ (เช่น 8GB) ฉันจะแบ่งมันออกเป็นหลายส่วนได้อย่างไรสมมุติว่า 3 ส่วนเท่า ๆ กันแล้วหลังจากนั้นฉันจะรวมมันในภายหลังได้อย่างไร


นี่น่าจะเป็นสิ่งที่ซ้ำกันของaskubuntu.com/questions/12172/ …
Jo-Erlend Schinstad

คุณแน่ใจหรือว่า "นี่น่าจะเป็น" เฮคมันเป็นสิ่งเดียวกัน ยกเว้นที่นี่ตอนนี้พร้อมโบนัส "ตัวอย่างและทางเลือกเพิ่มเติม"
Luis Alvarado

มันอาจช่วยได้ถ้าคุณพูดเพิ่มเติมเกี่ยวกับสาเหตุที่คุณต้องการแยกมันออกมาและไม่ว่าคุณจะต้องการให้แยกออกเป็นสารตั้งต้นไบต์หรือว่าคุณเปิดให้พวกเขาห่อหุ้มด้วยการตรวจสอบข้อผิดพลาดหรือการติดฉลาก หากนี่คือการวางไว้บนสื่อขนาดเล็กหรือสำหรับการถ่ายโอนเครือข่ายฉันมองไปที่สิ่งที่ต้องการPAR2
poolie


หนึ่งซับสำหรับการแบ่งเท่า ๆ กันโดย N: (1. ) แยกโดยการแบ่งบรรทัด - บรรทัด $ (($ (wc -l <$ {your_filename}) / $ {N})) $ {your_filename} (2. ) แยกโดย bytes split --bytes $ (($ (wc -c <$ {your_filename}) / $ {N})) $ {your_filename}
เทรเวอร์บอยด์สมิ ธ

คำตอบ:


272

มีหลายวิธีที่จะทำให้สำเร็จ เริ่มจากพื้นฐานกันก่อน

การใช้คำสั่งsplitและcat :

ให้บอกว่าฉันมีภาพและมันใหญ่เกินไป (10MB) ทั้งหมดที่ฉันทำคือ:

split --bytes=1M /path/to/image/image.jpg /path/to/image/prefixForNewImagePieces

จากนั้นเพื่อรวมเข้าด้วยกันฉันใช้แมว:

cat prefixFiles* > newimage.jpg

ตัวอย่างเช่น:

สมมติว่าฉันอยู่ในโฟลเดอร์ที่มีภาพ:

split --bytes=1M myimage.jpg new

หากรูปภาพอยู่ในไดเรกทอรีที่เรียกว่า images คุณสามารถทำได้ดังนี้:

split --bytes=1M images/myimage.jpg new

หากรูปภาพอยู่ในไดเรกทอรี / home / cyrex / images คุณสามารถทำได้ดังนี้:

split --bytes=1M /home/cyrex/images/myimage.jpg new

(ในกรณีทั้งหมดข้างต้นก็จะแยกออกmyimage.jpgเป็นชิ้น 1MB และคำนำหน้าชื่อของชิ้นส่วนที่มีคำใหม่. ดังนั้นพวกเขาจะมีลักษณะเช่นnewaa, newab, newac, newad... )

หากคุณกำลังแยกไฟล์ข้อความและต้องการแยกไฟล์ตามบรรทัดคุณสามารถทำได้ดังนี้:

split -l 1000 book.txt new

ซึ่งจะแยกไฟล์ข้อความในไฟล์เอาต์พุตแต่ละบรรทัด 1,000 บรรทัด นี่เป็นอีกวิธีหนึ่งในการแบ่งไฟล์และส่วนใหญ่จะใช้สำหรับไฟล์ข้อความเช่นบันทึกการถ่ายโอนข้อมูล sql, ไฟล์ csv ฯลฯ

จากนั้นฉันก็รวมมัน

cat new* > newimage.jpg

นี่เป็นวิธีหนึ่ง คุณสามารถเปลี่ยนขนาดของชิ้นส่วนที่แยกได้ เพียงแค่เปลี่ยนชิ้นส่วนที่บอกว่า--bytes=1Mเป็น--bytes=1K1 กิโลไบต์หรือ 1G สำหรับกิกะไบต์หรือตัวเลขอื่นเช่น--bytes=4Kชิ้น 4KB

ใช้Nautilus

อีกวิธีคือตัวเลือกการบีบอัดใน gui of Nautilus มันมีตัวเลือกให้คุณแบ่งไฟล์หรือไฟล์ที่คุณต้องการบีบอัดให้มีขนาดเล็กกว่าเมกะไบต์ มันง่ายและสะดวก

อีกวิธีหนึ่งคือใช้7z

สมมติว่าคุณมีภาพ ISO ที่เรียกว่าubuntu.isoคุณสามารถทำได้:

7z a -v5m -mx0 ubuntu.7z ubuntu.iso

นี้จะสร้างไฟล์ขนาด 5MB ubuntu.isoจาก ขนาด-v5mคือปริมาตรเพื่อให้คุณสามารถเปลี่ยนเป็น 10, 12, 1, 3 และ m สามารถเปลี่ยนเป็น k สำหรับกิโลไบต์ ฯลฯ -mx0สวิทช์บอกว่า 7-Zip ที่จะใช้การบีบอัดไม่ว่ามีเพียงเพื่อแบ่งข้อมูลออกเป็นส่วน

ในการสกัดเพียงทำ

7z x ubuntu.7z.001

วิธีนี้คุณแยกไฟล์แรกและ 7z เริ่มคลายไฟล์จากไฟล์ต่อไปนี้ตามลำดับ คุณสามารถทำได้

7z e ubuntu.7z.001

ซึ่งมีผลเหมือนกันที่นี่


2
ยังไม่ได้รวม rar เนื่องจากยังไม่ได้เปิดแหล่งที่มา (เท่าที่ฉันรู้) และไม่ได้เพิ่ม Tar เนื่องจากฉันกำลังมองหาวิธีที่ง่ายในการแยก
Luis Alvarado

เพิ่ม gzip ด้วย - 7zip ต้องใช้แพ็คเกจการติดตั้ง iirc
Broam

สำหรับสิ่งที่ฉันรู้ Gzip (เช่น tar) ไม่มีตัวเลือกง่าย ๆ ในการแยกไฟล์บีบอัด ในทุกกรณีฉันได้เห็นพวกเขาโดยใช้คำสั่งแยกเพื่อ "แยก" ไฟล์บีบอัด ดังนั้นมันจะไม่ใช่คำสั่ง แต่เป็นกลุ่มของคำสั่งเพื่อให้บรรลุวัตถุประสงค์เดียวซึ่งสามารถทำได้โดยใช้คำสั่งเดียวเช่น split หรือ 7z สำหรับการติดตั้ง 7Zip (ซึ่งเป็น p7zip ของ p7zip เต็มแพ็คเกจ) มันไม่เคยถามฉันเพื่อ iirc;)
Luis Alvarado

เพิ่มการแยกไฟล์ข้อความ ลืมไปเลยและวันนี้มันก็เกิดขึ้นฉันต้องแบ่งไฟล์ CSV สองสามไฟล์ นี่สำหรับทิ้งที่คุณต้องมีจำนวนบรรทัดที่เฉพาะเจาะจง
Luis Alvarado

10

ใช้split -bกับหมายเลขที่เหมาะสมคุณจะได้รับสามชิ้น

จำนวนอาจเป็น:

size=$(wc -c <"file name")
one_third=$((size/3+1))

หากต้องการประกอบอีกครั้งให้ใช้ cat

cat "file name"* > "file name"

หน้าคู่มือจะช่วยกรอกรายละเอียด


1
นอกจากนี้คุณยังสามารถใช้split --numberเพื่อsplitคำนวณจำนวนไฟล์ให้กับคุณ: askubuntu.com/questions/54579/ …
Ciro Santilli 新疆改造中心中心法轮功六四事件

4

เป็นโปรแกรมฟรีแวร์ที่ได้รับความนิยมในการแยกและรวมไฟล์อีกครั้ง โปรแกรมมีให้บริการบน Windows, Linux และแพลตฟอร์มอื่น ๆ ที่หลากหลาย

HJSplit สำหรับ Linux เป็นตัวแยกไฟล์ฟรีแวร์สำหรับ Linux พร้อมส่วนต่อประสานกราฟิกกับผู้ใช้ HJSplit รองรับขนาดไฟล์กว่า 100 กิกะไบต์, แยก, เข้าร่วม / ตรวจสอบ, ตรวจสอบ MD5, เปรียบเทียบไฟล์, "รันโดยไม่ต้องติดตั้ง" และโปรแกรมสามารถพกพาได้อย่างสมบูรณ์

HJSplit สำหรับ Linux ไม่จำเป็นต้องติดตั้งและไม่ได้ขึ้นอยู่กับไลบรารีพิเศษใด ๆ เพียงแยกไฟล์เก็บถาวร hjsplitlx.tar.gz ลงในไดเรกทอรีที่คุณเลือกและเริ่มโปรแกรมจากตัวจัดการไฟล์ Linux หรือหน้าต่างเทอร์มินัล คุณอาจต้องปรับเปลี่ยนการอนุญาตไฟล์ของโปรแกรมเป็น 'ปฏิบัติการ'

ป้อนคำอธิบายรูปภาพที่นี่


1
ฉันต้องบอกว่าไฟล์ Windows ใช้งานได้บน Linux ด้วย
Uri Herrera

2
มีหลายวิธีในการแยก / เข้าร่วมไฟล์ก่อนที่จะไปที่โปรแกรมเช่นนี้ ฉันควรใช้ตัวเลือกที่มีประสิทธิภาพที่ linux นำเสนอและสำหรับการแยก / รวมไฟล์มันมีวิธีที่รวดเร็วและปลอดภัยในการทำ
Luis Alvarado

3
มันมีความปลอดภัยได้อย่างรวดเร็วและมีการข้ามแพลตฟอร์มที่รวมถึงลินุกซ์ก็ไม่ได้เป็นโปรแกรม Windows เท่านั้นที่เพิ่งเกิดขึ้นเพื่อให้ทำงานใน Linux เกินไป ...
ยูริโน่

2
ฉันใช้ HJSplit มันยอดเยี่ยมและเรียบง่าย ไม่จำเป็นต้องพิมพ์คำสั่งและชื่อพารามิเตอร์เมื่อคุณสามารถเติมค่าพารามิเตอร์ลงในกล่องข้อความ
แมทธิวอ่าน

2
และการดาวน์โหลดฟรีทำให้แย่ลงเพราะ? และฉันต้องบอกว่าไม่มีที่ไหนใน OP เขาขอซอฟต์แวร์ฟรี (ซึ่งนี่คือฟรี) และสิ่งที่คุณหมายถึงเรียกว่าเปิดมีความแตกต่างที่คุณรู้หรือไม่
Uri Herrera

4

คำพังเพยแยก? http://gnome-split.org/

GNOME Split เป็นเครื่องมือที่ช่วยให้คุณสามารถแยกไฟล์และรวมกลับคืนมาได้ มันเขียนใน Java และใช้ส่วนติดต่อผู้ใช้ GTK + (ขอบคุณโครงการ java-gnome) เป้าหมายคือการนำเสนอการใช้งานดั้งเดิมของโครงการที่คล้ายกันซึ่งสามารถจัดการไฟล์ได้หลายรูปแบบ (เช่น Xtremsplit)

http://www.omgubuntu.co.uk/2010/08/split-large-files-easily-in-ubuntu-with-gnome-split/


3

HOZ - Hacha Open Zource v1.65 - http://hoz.sourceforge.net/

ป้อนคำอธิบายรูปภาพที่นี่

จากนักพัฒนา:

OZ คือสิ่งที่คุณจะเรียกว่า 'ตัวแยกไฟล์' รูปแบบไฟล์ของมันเหมือนกับไฟล์ที่ใช้โดยซอฟต์แวร์ 'Hacha' ซึ่งเป็นตัวแยกสัญญาณที่รู้จักกันดีในสเปนและละตินอเมริกา HOZ เป็นการใช้งาน C แบบโอเพ่นซอร์สและพกพาของตัวแยกสัญญาณที่รองรับ 'Hacha'

HOZ นั้นเล็กกว่าและเร็วกว่า 'Hacha'

btw ฉันใช้ 'Z' isntead ของ 'S' ใน 'Zource' เพราะ 'hoz' คือ 'เคียว' ในภาษาสเปนและเนื่องจาก 'hacha' เป็นคำภาษาสเปนสำหรับ 'ขวาน' ...

หลังจากติดตั้งคุณสามารถใช้ Hoz GUI ได้โดยการวางghozในเครื่อง การดำเนินการนั้นง่ายมากที่ไม่ต้องการคำอธิบายใด ๆ แต่สามารถขอข้อมูลเพิ่มเติมได้ในเว็บไซต์ของผู้พัฒนา

โชคดี!


0

คนตัดไม้

การแยกไฟล์และผสานยูทิลิตี้ฟรีที่พัฒนาใน Java มันเป็นแอพพลิเคชั่นขนาดเล็กที่ช่วยให้ผู้ใช้สามารถแบ่งไฟล์ประเภทใดก็ได้ในขนาดที่เล็กลงเป็น KB, MB หรือ GB

มันสามารถใช้ได้กับ Linux เช่นเดียวกับ Windows

WoodCutter มี 3 วิธีในการรวมไฟล์ต้นฉบับกลับมา WoodCutter สร้างไฟล์ผสานซึ่งสามารถประมวลผลโดยแอปพลิเคชัน WoodCutter เพื่อเข้าร่วมไฟล์ทั้งหมดกลับ ในกรณีที่ตัวรับสัญญาณของไฟล์แยกไม่ได้ติดตั้ง WoodCutter แล้วยังสามารถรับไฟล์ต้นฉบับได้เนื่องจาก WoodCutter ยังสร้างไฟล์แบตช์และไฟล์สคริปต์เชลล์เพื่อรวมไฟล์กลับ ไฟล์แบตช์จะใช้ในแพลตฟอร์ม Windows และเชลล์สคริปต์จะใช้ในแพลตฟอร์ม Linux

http://java-puzzle.blogspot.com/2009/07/woodcutter.html


2
ใบอนุญาตคือ "ฟรีแวร์" ฉันคิดว่าเครื่องมือซอฟต์แวร์ฟรีที่อยู่ใน repos เป็นทางออกที่ดีกว่า
Broam

0

split --number

นี่เป็นตัวเลือกที่ดีในการสร้างไฟล์ N ที่มีขนาดเท่ากันยกเว้นไฟล์สุดท้ายซึ่งอาจมีขนาดใหญ่กว่าเนื่องจากไม่สามารถแบ่งแยกได้ เช่น:

printf '0123456789' > f.txt
split -d --number 2 f.txt f.txt.part.
tail f.txt.part.*

ให้:

==> f.txt.part.00 <==
01234
==> f.txt.part.01 <==
56789

และ:

split -d --number 3 f.txt f.txt.part.
tail f.txt.part.*

ให้:

==> f.txt.part.00 <==
012
==> f.txt.part.01 <==
345
==> f.txt.part.02 <==
6789

เมื่อเทียบกับการ-bคำนวณขนาด + อย่างชัดเจนซึ่งมีการกล่าวถึงที่: https://askubuntu.com/a/54584/52975ไฟล์สุดท้ายอาจมีขนาดใหญ่กว่าไฟล์ก่อนหน้าเกือบสองเท่าซึ่งบางครั้งก็เป็นข้อเสียของตัวเลือกนี้ อย่างไรก็ตามมันสะดวกกว่าหลายครั้งเนื่องจากคุณไม่ต้องทำการคำนวณขนาดด้วยตัวเอง

จำนวนบรรทัดที่ถูกถามที่: https://stackoverflow.com/questions/2016894/how-to-split-a-large-text-file-into-smaller-files-with-equal-number-of-lines

ทดสอบในsplit2.28, Ubuntu 18.04

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.