Answers:
#!/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脚本非常有用。但是我想将500GB的磁盘映像分成几个大约50GB的大块。这样,脚本失败了,因为 dd
无法处理这么大的 bs
参数。
所以我定制了制作脚本 bs=1M
并要求兆字节而不是字节。现在,我可以使用,例如,在大块中拆分 50000
50GB。
#!/bin/bash # (c) whitequark 2010 # (c) dertalai 2015 (minimal modifications) set -e if [ $# != 2 ]; then echo "Usage: $0 " 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 megabytes (1 MB = 1048576 bytes)." echo " Use at your own risk." exit 0 fi filename=$1 #partsize=$2 partsizeMB=$2 partsize=$(($2 * 1048576)) 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=$partsizeMB bs=1M skip=$((($_part - 1) * $partsizeMB)) 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}"
你真的有500GB文件吗?如果您通过归档文件夹或磁盘生成500GB文件,然后尝试将其拆分,则可以通过将tar的输出(或您正在使用的任何内容)传输到split中来实时拆分:
sudo tar cvjsp /Volumes/BackupDisk/Backups.backupdb/ | \
split -d -b 4480m - Backups.backupdb.tar.bz2.
这将对我的Time机器数据库的存档进行DVD大小的拆分。但是,它确实让它们同时出现,这意味着它确实无法满足您的需求。
看我的问题 这里 了解更多信息。 Whitequark的脚本可能会在那里稍作修改!我得试试看。