Разбить большой файл на файлы меньшего размера [дубликат]

Как мне разбить большой файл на файлы меньшего размера?

И как я могу отправить файлы частей на несколько компьютеров через pssh

И как мне вернуть эти файлы на клиентский компьютер и заново собрать их как исходный файл?

1
задан 22 December 2017 в 22:23

1 ответ

Можно использовать split утилита в Linux для разделения файла или согласно размеру или согласно количеству строк.

  • разделение - разделило файл на части

          `split [OPTION]... [INPUT [PREFIX]]`
    

Объяснение:

  • Произведите части фиксированного размера ВХОДА к PREFIXaa, PREFIXab...; размер по умолчанию является 1 000 строк, и ПРЕФИКС по умолчанию является 'x'. Без ВХОДА, или когда ВВЕДЕННЫЙ - читают стандартный вход.

Опции:

  • - a, - suffix-length=N use suffixes of length N (default 2)
  • - b, - bytes=SIZE put SIZE bytes per output file
  • - C, - line-bytes=SIZE put at most SIZE bytes of lines per output file
  • - d, - числовые суффиксы use numeric suffixes instead of alphabetic
  • - l, - lines=NUMBER put NUMBER lines per output file
  • - подробный print a diagnostic just before each output file is opened
  • помощь display this help and exit
  • - версия output version information and exit

РАЗМЕР может быть (или может быть целое число, дополнительно сопровождаемое), одно из следующего: КБ 1000, K 1024, МБ 1000*1000, M 1024*1024, и так далее для G, T, P, E, Z, Y.*

Примеры:

  • $ split --bytes 500M --numeric-suffixes --suffix-length=3 abc abc.

(где входное имя файла является abc, и последним аргументом является выходной префикс),

  • то же с короткими опциями:

$ split -b 100k -d -a 3 abc abc.

Команды разделения генерируют названные части: abc 000, abc 001...

Для повторной сборки сгенерированных частей снова можно использовать, например:

$ cat abc.* > abc_2

(предполагающий то, что оболочка сортирует результаты оболочки globbing - и количество частей, не превышает системно-зависимый предел аргументов),

Можно сравнить результат через:

$ cmp abc abc_2 $ echo $?

(который должен произвести 0),

С другой стороны, можно использовать комбинацию find/sort/xargs, чтобы повторно собрать части:

$ find -maxdepth 1 -type f -name 'abc.*' | sort | xargs cat > abc_3

  • Вы могли также сделать что-то вроде этого, но это создаст файлы с 3 000 строк, названных xaa xab xac...:

$split -l 3000 filename

  • Другая опция, разделенная размером выходного файла (все еще разделяет на разрывах строки):

$split -C 50m --numeric-suffixes input_filename output_prefix

создает файлы как output_prefix01 output_prefix02 output_prefix03... каждый макс. размер 50 мегабайтов.

pssh:

[feddy@localhost ~]$ pscp.pssh --help
Usage: pscp.pssh [OPTIONS] local remote

Options:
  --version             show program's version number and exit
  --help                show this help message and exit
  -h HOST_FILE, --hosts=HOST_FILE
                        hosts file (each line "[user@]host[:port]")
  -H HOST_STRING, --host=HOST_STRING
                        additional host entries ("[user@]host[:port]")
  -l USER, --user=USER  username (OPTIONAL)
  -p PAR, --par=PAR     max number of parallel threads (OPTIONAL)
  -o OUTDIR, --outdir=OUTDIR
                        output directory for stdout files (OPTIONAL)
  -e ERRDIR, --errdir=ERRDIR
                        output directory for stderr files (OPTIONAL)
  -t TIMEOUT, --timeout=TIMEOUT
                        timeout (secs) (0 = no timeout) per host (OPTIONAL)
  -O OPTION, --option=OPTION
                        SSH option (OPTIONAL)
  -v, --verbose         turn on warning and diagnostic messages (OPTIONAL)
  -A, --askpass         Ask for a password (OPTIONAL)
  -x ARGS, --extra-args=ARGS
                        Extra command-line arguments, with processing for
                        spaces, quotes, and backslashes
  -X ARG, --extra-arg=ARG
                        Extra command-line argument
  -r, --recursive       recusively copy directories (OPTIONAL)

Example: pscp -h hosts.txt -l irb2 foo.txt /home/irb2/foo.txt

Пример (для Вашего случая):

[feddy@localhost ~]$ touch ko001 ko002 ko003
[feddy@localhost ~]$ pscp.pssh -AH feddy@localhost ko00* Downloads/
Warning: do not enter your password if anyone else has superuser privileges or access to your account.
Password:
[1] 20:26:42 [SUCCESS] feddy@localhost
[feddy@localhost ~]$ ls Downloads/
ko001   ko002   ko003

Теперь, Наконец, можно использовать cat или find утилита, чтобы присоединиться или повторно собрать все файлы (как уже упомянуто выше)

2
ответ дан 22 December 2017 в 22:23

Другие вопросы по тегам:

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