Сжатие stdin на лету не удается? - PullRequest
1 голос
/ 24 июля 2011

Из того, что было предложено здесь , я пытаюсь перенаправить вывод с sqlcmd на 7zip, чтобы можно было сэкономить место на диске при выгрузке базы данных объемом 200 ГБ. Я пробовал следующее:

> sqlcmd -S <DBNAME> -Q "SELECT * FROM ..." | .\7za.exe a -si <FILENAME>

Похоже, это не работает, даже когда я покидаю систему на целый день. Тем не менее, следующие работы:

> sqlcmd -S <DBNAME> -Q "SELECT TOP 100 * FROM ..." | .\7za.exe a -si <FILENAME>

и даже этот:

> sqlcmd -S <DBNAME> -Q "SELECT * FROM ..."

Когда я удаляю символ pipe, я вижу результаты и даже могу перенаправить его в файл за 7 часов до конца.

Я не уверен, что происходит с передачей большого количества выходных данных, но до этого момента я мог понять, что 7zip, кажется, ждет, чтобы поглотить весь ввод, прежде чем он создаст архивный файл (потому что я не действительно вижу файл, создаваемый для начала), поэтому я не уверен, что он действительно выполняет сжатие на лету. Итак, я попробовал gzip и вот мой опыт:

> echo "Test" | .\gzip.exe > test.gz
> .\gzip.exe test.gz
gzip: test.gz: not in gzip format

Я не уверен, что делаю это правильно. Есть предложения?

1 Ответ

1 голос
/ 24 июля 2011

О, мальчик!Это был PowerShell все это время!Я понятия не имею, почему это происходит по крайней мере с gzip.Gzip продолжал жаловаться, что ввод был не в формате GZIP.Я переключился на обычную командную строку, и все начало работать.

Я наблюдал это раньше.Похоже, что | и > имеют немного различную функциональность в PowerShell и командной строке.Не уверен, что именно, но если кто-то знает об этом, пожалуйста, добавьте сюда.

...