Конвейерные данные в командной строке Windows

мне нужно получить резервный дамп большого (~8gb) репозитория svn. Мой текущий метод включает использование svnadmin dump в файл, а затем с помощью 7-Zip сжать и разделить файл.

> svnadmin dump c:pathtomyrepo > c:svndump.svn
> 7z svndump.svn svndump.7z      // or whatever the correct syntax is

мне было интересно, будет ли способ пропустить посредника здесь и получить данные дампа svn, которые будут сжаты за один раз, используя трубы или что-то еще? Возможно ли это? Каким будет синтаксис?

2 ответов



поскольку ваш образец был именно тем, что я искал, это то, что я сделал в качестве полного решения для "сброса" всех моих репозиториев. Это решение сбрасывает все хранилища svn в 7-zip-файл без несжатого промежуточного.

поместите этот пакетный файл в свой "корень репозитория", например m:\repositories\dump-all - ... летучая мышь!--3-->

pushd %~dp0
SET SEVENZIP="c:\Program Files-Zipz.exe" a -mx1 -si 
FOR /f "tokens=*" %%i in ('DIR /a:d /b') DO svnadmin dump %%i | %SEVENZIP% ..\_svndump\%%i.dump.7z

и запустите этот пакет так, если вам нужно запустить его с низким приоритетом, оба процесса (7z + svnadmin) потребуют много cpu

start /low m:\repositories\dump-all.bat

Примечания: "pushd %~dp0 "установите" текущий каталог " туда, где находится пакетный файл, вместо того, чтобы запускать его в "c:\windows\system32" если вы запустите его из проводника с помощью "Запуск от имени администратора". Это также работает, если рабочая папка находится на другом диске.
Нет необходимости вводить "m:"и" cd \repositories". если вы запустите его с диска" c:".