klink0v (klink0v) wrote,
klink0v
klink0v

Categories:

tar | netcat для большого количества файлов

Вспомним классический способ переноса папки с файлами с одного хоста на другой.

Все смеются, все счастливы.

Но теперь угораздило нас передавать не папочку, а список файлов. Причем, список весьма жирный. Пару миллионов штук. Поимённо. Пытаемся сделать по аналогии.

И внезапно обнаруживаем, что так не работает. Кто сходу сообразит почему, не читая дальше, тот молодец.

[Если не сообразил, ответ здесь]Правильно, потому что xargs на отправителе будет периодически перезапускать tar с новым списком аргументов. Как только это произойдёт, tar на приёмнике завершит свою работу. А вместе с ним закончится и принимающий netcat. В свою очередь, перезапущенному на отправителе tar-у будет уже некуда сливать свои данные, поскольку сетевой транспорт к этому моменту благополучно развалился.

Но что же делать? Как быть? Очевидно,

[что]что потребуется перезапускать принимающий софт. Но как именно? Есть два варианта: всю связку "tar+netcat" или один только отдельно взятый tar.

Первый вариант плох тем, что принимающая сторона не успеет сделать это достаточно быстро. А передающей пофиг, она резкая как понос. Поэтому либо всё равно линк развалится, либо придется вставлять задержку а-ля "sleep 1" между попытками установки связи на передатчике, либо использовать постоянный инкремент номера порта. Шо то фигня, шо это фигня.

Второй вариант более привлекателен, но для его реализации потребуется немного извратиться с именованными каналами. Примерно так.

Такие дела. Не каждый дурак может закончить военную академию, а ведь я её кончил! © Только не спрашивайте пожалуйста зачем мне всё это нужно... Какие задачи, такие и решения.

Tags: bash, linux
Subscribe
  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 6 comments