LINUX.ORG.RU

Tar в конвейере на Windows

 


0

1

Всем доброго времени! Где-то нашёл в инете любопытный способ создания архивов и их отправки по FTP на лету без создания промежуточных файлов - идея очень понравилась. Делается примерно так:

tar -czf - somefile.txt | ncftpput -u user -p password -c somehost.ru /somefile.txt

Проверял в CentOS 6.5, всё работает. Захотел повторить трюк в Windows, скачал tar 1.21 отсюда, а NcFTP Client 3.2.5 for Microsoft Windows отсюда.

И вроде бы всё хорошо, по отдельности обе утилиты работают, но подружить их вместе не получается ни в какую. Это именно в Windows:

D:\utils>tar -cf - "D:\_temp\\video.mp4" | "C:\Windows\ncftpput" -u user -p password -c somehost.ru /v.mp4
tar: Removing leading `D:\' from member names
tar: -: Cannot write: Broken pipe
tar: Error is not recoverable: exiting now
Уже начитался в интернете, что при указании путей нужно экранировать слэши, чтобы не возникало спец. символов (именно по этой причине указано два \ перед video.mp4). Причём в паре со split'ом тот же самый tar прекрасно работает:
D:\utils>tar -cf - "D:\_temp\\video.mp4" | split -b 10m - "D:\_temp\video.tar"
tar: Removing leading `D:\' from member names

D:\utils>
В результате получаем распиленный на части архив, всё отлично. Что же не так в первом случае? Уже всю голову сломал. Буду признателен за любые идеи.

Искать почему

ncftpput

сломал свой stdin
//broken pipe - сломался поток вывода в который пишут

работает ли оно для echo «test» |ncftpput ....

FeyFre ★★★★ ()
Ответ на: комментарий от Novascriptum

А type somepicture.png |ncftpput ... ну или иного бинарного файла? Может какая опция есть указать клиенту работать с stdin как-то по другому

FeyFre ★★★★ ()
Ответ на: комментарий от FeyFre

Вроде действую прямо как в мануале: http://imageshack.com/i/pnjrUB1Np

А по вашей рекомендации вот что:

D:\utils>type img.jpg | "C:\Windows\ncftpput" -u user -p pass -c somehost.ru /img.jpg
Попытка записи в несуществующий канал.

Как это понимать? И, самое главное, что можно сделать?

Novascriptum ()
Ответ на: комментарий от Novascriptum

Что сделать я хз, а понимать это так: ncftpput не дружит с бинарными данными пришедшими по stdin. В какой-то момент оттуда приходит что-то что ему не нравится и он stdin закрывает, а значит то кто в этот канал пишет получает выше указанные ошибки. Как это лечить конкретно у ncftpput нужно спрашивать авторов.
Если это порт на win32 то точно кривой. Проще на коленке написать собственную утиль чем разбираться с криворукими авторами.

FeyFre ★★★★ ()

как вариант, можешь, конечно, тарнутый архив в base64 преобразить попробовать

Avial ★★★★★ ()
Ответ на: комментарий от FeyFre

Запустил ncftpput в этом конвйере с ключом -d для отладки, такой получил ответ:

2016-10-07 23:06:40  LibNcFTP 3.2.5 (January 17, 2011) compiled for Windows
2016-10-07 23:06:40  220: --------- Welcome to Pure-FTPd [privsep] ----------
2016-10-07 23:06:40       You are user number 29 of 1000 allowed.
2016-10-07 23:06:40       Local time is now 20:06. Server port: 21.
2016-10-07 23:06:40       This is a private system - No anonymous login
2016-10-07 23:06:40       IPv6 connections are also welcome on this server.
2016-10-07 23:06:40       You will be disconnected after 15 minutes of inactivity.
2016-10-07 23:06:40  Connected to somehost.ru.
2016-10-07 23:06:40  Cmd: USER someuser
2016-10-07 23:06:40  331: User someuser OK. Password required
2016-10-07 23:06:40  Cmd: PASS xxxxxxxx
2016-10-07 23:06:40  230: This server supports FXP transfers
2016-10-07 23:06:40       OK. Current restricted directory is /
2016-10-07 23:06:40  Cmd: PWD
2016-10-07 23:06:40  257: "/" is your current location
2016-10-07 23:06:40  Logged in to somehost.ru as someuser.
2016-10-07 23:06:40  Cmd: FEAT
2016-10-07 23:06:40  211: Extensions supported:
2016-10-07 23:06:40        EPRT
2016-10-07 23:06:40        IDLE
2016-10-07 23:06:40        MDTM
2016-10-07 23:06:40        SIZE
2016-10-07 23:06:40        REST STREAM
2016-10-07 23:06:40        MLST type*;size*;sizd*;modify*;UNIX.mode*;UNIX.uid*;UNIX.gid*;unique*;
2016-10-07 23:06:40        MLSD
2016-10-07 23:06:40        TVFS
2016-10-07 23:06:40        ESTA
2016-10-07 23:06:40        PASV
2016-10-07 23:06:40        EPSV
2016-10-07 23:06:40        SPSV
2016-10-07 23:06:40        ESTP
2016-10-07 23:06:40       End.
2016-10-07 23:06:40  Cmd: HELP SITE
2016-10-07 23:06:41  214: The following SITE commands are recognized
2016-10-07 23:06:41        ALIAS
2016-10-07 23:06:41        CHMOD
2016-10-07 23:06:41        IDLE
2016-10-07 23:06:41        UTIME
2016-10-07 23:06:41       Pure-FTPd - http://pureftpd.org/
2016-10-07 23:06:41  Cmd: CLNT NcFTPPut 3.2.5 Windows
2016-10-07 23:06:41  500: Unknown command
2016-10-07 23:06:41  Cmd: TYPE I
2016-10-07 23:06:41  200: TYPE is now 8-bit binary
2016-10-07 23:06:41  Cmd: PASV
2016-10-07 23:06:41  227: Entering Passive Mode (94,242,236,87,135,201)
2016-10-07 23:06:41  Cmd: STOR /v2.mp4
2016-10-07 23:06:41  150: Accepted data connection
2016-10-07 23:06:41  226: File successfully transferred
2016-10-07 23:06:41       0.071 seconds (measured here), 23.18 Kbytes per second
2016-10-07 23:06:41  Cmd: MDTM 20161007180641 /v2.mp4
2016-10-07 23:06:41  550: Can't check for file existence
2016-10-07 23:06:41  Cmd: QUIT
2016-10-07 23:06:41  221: Goodbye. You uploaded 2 and downloaded 0 kbytes.
2016-10-07 23:06:41       Logout.

Вот эта часть

2016-10-07 23:06:41  Cmd: CLNT NcFTPPut 3.2.5 Windows
2016-10-07 23:06:41  500: Unknown command
выглядит как-то подозрительно...

Novascriptum ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.