Jawaban:
#!/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 telah berhasil dijalankan setelah membongkar dan merakitnya lagi.
if [ $(stat -c '%s' "${filename}") == 0 ]; then rm "${filename}" fi
10737418240
, yaitu 10GB, itu salah membuat file 2GB. Saya membagi file 300GB dan memiliki 30GB gratis.
Saya menemukan skrip @whitequark sangat berguna. Tapi saya ingin membagi disk image 500GB menjadi beberapa potongan besar masing-masing sekitar 50GB. Dengan cara ini, skrip gagal, karena dd
tidak dapat menangani bs
parameter sebesar itu .
Jadi saya mengkustomisasi skrip untuk membuat bs=1M
dan meminta megabita alih-alih byte. Sekarang saya dapat membagi di tempat dan di potongan sangat besar menggunakan, misalnya, 50000
untuk 50GB.
#! / bin / bash # (c) whitequark 2010 # (c) dertalai 2015 (modifikasi minimal) set -e if [$ #! = 2]; kemudian echo "Penggunaan: $ 0" echo "Script ini akan membagi file menjadi beberapa bagian, mulai dari" gema "akhir, dan memotong file asli dalam proses." echo "Ukuran bagian ditentukan dalam megabyte (1 MB = 1048576 byte)." gema "Gunakan dengan risiko Anda sendiri." keluar 0 fi nama file = $ 1 # partsize = $ 2 partsizeMB = $ 2 partsize = $ (($ 2 * 1048576)) size = $ (stat -c '% s' "$ {filename}") parts = $ (($ size / $ partsize)) do_split () { _part = $ 1 _ukuran = $ 2 echo "Membagi bagian $ _part" echo $ (($ partsize * ($ _part - 1))) dd if = "$ {filename}" of = "$ {filename}. $ (printf '% 04d' $ _part)" \ count = $ partsizeMB bs = 1M skip = $ ((($ _ part - 1) * $ partsizeMB)) gema "Memotong file sumber" truncate "$ {filename}" --size = "- $ _ size" } lastsize = $ (($ size% $ partsize)) if [$ lastsize! = 0]; kemudian do_split $ (($ parts + 1)) $ lastsize fi untuk saya dalam $ (seq $ bagian -1 1); melakukan do_split $ i $ partsize selesai rm "$ {nama file}"
Apakah Anda sebenarnya sudah memiliki file 500GB? Jika Anda menghasilkan file 500GB dengan mengarsipkan folder atau disk, dan kemudian mencoba membaginya, Anda dapat membaginya secara langsung dengan memiparkan output tar (atau apa pun yang Anda gunakan) ke dalam split:
sudo tar cvjsp /Volumes/BackupDisk/Backups.backupdb/ | \
split -d -b 4480m - Backups.backupdb.tar.bz2.
Ini akan membuat arsip DVD berukuran terpisah dari basis data Time Machine saya. Namun, itu membuat semuanya sekaligus, yang berarti benar-benar tidak melakukan apa yang Anda cari.
Lihat pertanyaan saya di sini untuk info lebih lanjut. Skrip Whitequark bisa berguna di sana dengan sedikit modifikasi! Saya harus mencobanya.