Antworten:
#!/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 wurde nach dem Zerlegen und erneuten Zusammenbauen erfolgreich ausgeführt.
if [ $(stat -c '%s' "${filename}") == 0 ]; then rm "${filename}" fi
10737418240Übergabe des Werts , dh 10 GB, fälschlicherweise 2 GB-Dateien erstellt wurden. Ich habe eine 300 GB-Datei geteilt und hatte 30 GB frei.
Ich fand das @whitequark-Skript wirklich nützlich. Aber ich wollte ein 500-GB-Image in einige große Stücke von jeweils etwa 50 GB aufteilen. Auf diese Weise ist das Skript fehlgeschlagen, da es ddeinen so großen bsParameter nicht verarbeiten kann.
Also habe ich das Skript angepasst bs=1M, um Megabytes anstelle von Bytes zu erstellen und nach diesen zu fragen. Jetzt kann ich es in wirklich große Stücke aufteilen, zum Beispiel 50000für 50 GB.
#! / bin / bash
# (c) whitequark 2010
# (c) dertalai 2015 (minimale Änderungen)
set -e
if [$ #! = 2]; dann
echo "Usage: $ 0"
echo "Dieses Skript teilt die Datei in mehrere Teile auf, beginnend mit"
Echo "das Ende und Abschneiden der Originaldatei in Bearbeitung."
echo "Die Teilegröße wird in Megabyte angegeben (1 MB = 1048576 Byte)."
echo "Benutzung auf eigene Gefahr."
Ausfahrt 0
fi
Dateiname = $ 1
# partsize = $ 2
partsizeMB = $ 2
Teilegröße = $ (($ 2 * 1048576))
size = $ (stat -c '% s' "$ {filename}")
parts = $ (($ size / $ partsize))
do_split () {
_part = $ 1
_size = $ 2
echo "Teil teilen $ _teil"
echo $ (($ partsize * ($ _part - 1))
dd if = "$ {filename}" von = "$ {filename}. $ (printf '% 04d' $ _part)" \
count = $ partsizeMB bs = 1M skip = $ ((($ _ part - 1) * $ partsizeMB))
echo "Quelldatei abschneiden"
"$ {filename}" kürzen --size = "- $ _ size"
}
lastsize = $ (($ size% $ partsize))
if [$ lastsize! = 0]; dann
do_split $ (($ parts + 1)) $ lastsize
fi
für i in $ (seq $ parts -1 1); tun
do_split $ i $ partsize
erledigt
rm "$ {filename}"
Hast du eigentlich schon die 500GB Datei? Wenn Sie eine 500-GB-Datei generieren, indem Sie einen Ordner oder eine Festplatte archivieren und dann versuchen, sie zu teilen, können Sie sie spontan teilen, indem Sie die Ausgabe von tar (oder was auch immer Sie verwenden) in split umwandeln:
sudo tar cvjsp /Volumes/BackupDisk/Backups.backupdb/ | \
split -d -b 4480m - Backups.backupdb.tar.bz2.
Dadurch wird ein Archiv meiner Time Machine-Datenbank in DVD-Größe aufgeteilt. Es macht sie jedoch alle auf einmal, was bedeutet, dass es wirklich nicht das tut, wonach Sie suchen.
Siehe meine Frage hier für weitere Informationen. Das Skript von Whitequark könnte dort mit einigen geringfügigen Änderungen nützlich sein! Ich werde es versuchen müssen.