ผมมีไฟล์ 500G ที่ผมอยากจะแบ่งออกเป็นลินุกซ์ แต่ฉันไม่ได้มี 500G split(1)
อีกฟรีสำหรับการทำงาน
มีเครื่องมือหรือสคริปต์ที่จะแบ่งไฟล์ในตำแหน่งเป็น 1G ชิ้นในขณะที่ใช้พื้นที่พิเศษน้อยที่สุด?
ผมมีไฟล์ 500G ที่ผมอยากจะแบ่งออกเป็นลินุกซ์ แต่ฉันไม่ได้มี 500G split(1)
อีกฟรีสำหรับการทำงาน
มีเครื่องมือหรือสคริปต์ที่จะแบ่งไฟล์ในตำแหน่งเป็น 1G ชิ้นในขณะที่ใช้พื้นที่พิเศษน้อยที่สุด?
คำตอบ:
#!/bin/bash
# (c) whitequark 2010
set -e
if [ $# != 2 ]; then
echo "Usage: $0 <filename> <part size>"
echo " This script will split file to multiple parts, starting from"
echo " the end, and truncating the original file in process."
echo " Part size is specified in bytes."
echo " Use at your own risk."
exit 0
fi
filename=$1
partsize=$2
size=$(stat -c '%s' "${filename}")
parts=$(($size / $partsize))
do_split() {
_part=$1
_size=$2
echo "Splitting part $_part"
echo $(($partsize * ($_part - 1)))
dd if="${filename}" of="${filename}.$(printf '%04d' $_part)" \
count=1 bs=$partsize skip=$(($_part - 1))
echo "Truncating source file"
truncate "${filename}" --size="-$_size"
}
lastsize=$(($size % $partsize))
if [ $lastsize != 0 ]; then
do_split $(($parts + 1)) $lastsize
fi
for i in $(seq $parts -1 1); do
do_split $i $partsize
done
rm "${filename}"
gedit ประสบความสำเร็จในการรันหลังจากแยกชิ้นส่วนแล้วประกอบอีกครั้ง
if [ $(stat -c '%s' "${filename}") == 0 ]; then rm "${filename}" fi
10737418240
เช่น 10GB มันสร้างไฟล์ 2GB ผิด ฉันแบ่งไฟล์ 300GB และมี 30GB ฟรี
ฉันพบว่า @whitequark script มีประโยชน์จริงๆ แต่ฉันต้องการแบ่งดิสก์อิมเมจขนาด 500GB ให้เป็นชิ้นขนาดใหญ่ประมาณ 50GB ต่อชิ้น ด้วยวิธีนี้สคริปต์ล้มเหลวเนื่องจากdd
ไม่สามารถจัดการbs
พารามิเตอร์ขนาดใหญ่ได้
ดังนั้นฉันจึงปรับแต่งสคริปต์สำหรับการสร้างbs=1M
และขอเมกะไบต์แทนที่จะเป็นไบต์ ตอนนี้ฉันสามารถแยกชิ้นส่วนและชิ้นใหญ่ ๆ ที่ใช้งานเช่น50000
50GB
#! / bin / ทุบตี # (c) whitequark 2010 # (c) dertalai 2015 (แก้ไขน้อยที่สุด) ชุด -e ถ้า [$ #! = 2]; แล้วก็ echo "การใช้งาน: $ 0" echo "สคริปต์นี้จะแบ่งไฟล์เป็นหลายส่วนโดยเริ่มจาก" echo "จุดสิ้นสุดและตัดทอนไฟล์ต้นฉบับที่อยู่ระหว่างดำเนินการ" echo "ระบุขนาดชิ้นงานเป็นเมกะไบต์ (1 MB = 1048576 ไบต์)" echo "ใช้ความเสี่ยงของคุณเอง" ออก 0 Fi ชื่อไฟล์ = $ 1 # partsize = $ 2 partsizeMB = $ 2 partsize = $ (($ 2 * 1048576)) ขนาด = $ (stat -c '% s' "$ {filename}") ส่วน = $ (($ ขนาด / $ ชิ้นส่วน)) do_split () { _part = $ 1 _size = $ 2 echo "แยกส่วน $ _part" echo $ (($ partsize * ($ _part - 1))) dd if = "$ {filename}" ของ = "$ {filename}. $ (printf '% 04d' $ _part)" \ count = $ partsizeMB bs = 1M ข้าม = $ (((ส่วนที่ _ $ - 1) * $ partsizeMB)) echo "การตัดทอนซอร์สไฟล์" ตัดทอน "$ {filename}" --size = "- $ _ size" } lastsize = $ (($ ขนาด% $ ชิ้นส่วน)) ถ้า [$ lastsize! = 0]; แล้วก็ do_split $ (($ ชิ้นส่วน + 1)) $ lastsize Fi สำหรับ i ใน $ (seq $ parts -1 1); ทำ do_split $ i $ ชิ้นส่วน เสร็จแล้ว rm "$ {filename}"
คุณมีไฟล์ 500GB หรือไม่ หากคุณกำลังสร้างไฟล์ 500GB โดยการเก็บถาวรโฟลเดอร์หรือดิสก์จากนั้นพยายามแยกไฟล์คุณสามารถแบ่งไฟล์แบบทันทีโดยการวาง pip ของ output ของ tar (หรืออะไรก็ตามที่คุณใช้) แบ่งเป็น:
sudo tar cvjsp /Volumes/BackupDisk/Backups.backupdb/ | \
split -d -b 4480m - Backups.backupdb.tar.bz2.
สิ่งนี้จะทำให้การแยกเก็บถาวรขนาด DVD ของฐานข้อมูล Time Machine ของฉัน อย่างไรก็ตามมันทำให้พวกเขาทั้งหมดในครั้งเดียวซึ่งหมายความว่ามันไม่ได้ทำสิ่งที่คุณกำลังมองหา
ดูคำถามของฉันที่นี่สำหรับข้อมูลเพิ่มเติม สคริปต์ของ Whitequark อาจมีประโยชน์ตรงนั้นพร้อมการดัดแปลงเล็กน้อย! ฉันจะต้องลองดู