Разделение файлов с использованием tar, gz, zip или bzip2 [закрыто]

Мне нужно сжать большой файл размером около 17-20 ГБ. Мне нужно разбить его на несколько файлов размером около 1 ГБ на файл.

Я искал решение через Google и нашел способы, используя команды split и cat. Но они не работали для больших файлов вообще. Кроме того, они не будут работать в Windows; Мне нужно извлечь его на компьютере с Windows.

137
задан matpie 9 July 2019 в 23:43
поделиться

4 ответа

Вы можете использовать команду split с параметром -b :

split -b 1024m file.tar.gz

Ее можно повторно собрать на машине Windows, используя @ Ответ Джошуа .

copy /b file1 + file2 + file3 + file4 filetogether

Изменить : Как @Charlie заявил в комментарии ниже, вы можете явно указать префикс, потому что в противном случае он будет использовать x , что может сбивать с толку .

split -b 1024m "file.tar.gz" "file.tar.gz.part-"

// Creates files: file.tar.gz.part-aa, file.tar.gz.part-ab, file.tar.gz.part-ac, ...

Edit : редактирование сообщения, потому что вопрос закрыт, и наиболее эффективное решение очень близко к содержанию этого ответа:

# create archives
$ tar cz my_large_file_1 my_large_file_2 | split -b 1024MiB - myfiles_split.tgz_
# uncompress
$ cat myfiles_split.tgz_* | tar xz

Это решение позволяет избежать необходимости использовать промежуточный большой файл при (де) сжатии . Используйте параметр tar -C, чтобы использовать другой каталог для результирующих файлов. кстати, если архив состоит только из одного файла, можно избежать использования tar и использовать только gzip:

# create archives
$ gzip -c my_large_file | split -b 1024MiB - myfile_split.gz_
# uncompress
$ cat myfile_split.gz_* | gunzip -c > my_large_file

Для Windows вы можете загрузить перенесенные версии тех же команд или использовать cygwin.

244
ответ дан 23 November 2019 в 23:32
поделиться

Если вы разделяете Linux, вы все равно можете выполнить повторную сборку в Windows.

copy /b file1 + file2 + file3 + file4 filetogether
26
ответ дан 23 November 2019 в 23:32
поделиться

используйте tar для разделения на несколько архивов

существует множество программ, которые будут работать с tar-файлами в Windows, включая cygwin.

9
ответ дан 23 November 2019 в 23:32
поделиться

Протестированный код сначала создает один файл архива, а затем разбивает его:

 gzip -c file.orig > file.gz
 CHUNKSIZE=1073741824
 PARTCNT=$[$(stat -c%s file.gz) / $CHUNKSIZE]

 # the remainder is taken care of, for example for
 # 1 GiB + 1 bytes PARTCNT is 1 and seq 0 $PARTCNT covers
 # all of file
 for n in `seq 0 $PARTCNT`
 do
       dd if=file.gz of=part.$n bs=$CHUNKSIZE skip=$n count=1
 done

В этом варианте не создается отдельный файл архива, а сразу создаются части:

gzip -c file.orig |
    ( CHUNKSIZE=1073741824;
        i=0;
        while true; do
            i=$[i+1];
            head -c "$CHUNKSIZE" > "part.$i";
            [ "$CHUNKSIZE" -eq $(stat -c%s "part.$i") ] || break;
        done; )

В этом варианте, если размер файла архива делится на $ CHUNKSIZE , тогда размер последнего частичного файла будет равен 0 байтам.

8
ответ дан 23 November 2019 в 23:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: