Передача данных в командной строке Windows
Мне нужно получить резервный дамп большого (~8 ГБ) хранилища SVN. Мой текущий метод предполагает использование svnadmin dump
в файл, а затем с помощью 7-Zip сжать и разделить файл.
> svnadmin dump c:\path\to\myrepo > c:\svndump.svn
> 7z svndump.svn svndump.7z // or whatever the correct syntax is
Мне было интересно, есть ли способ пропустить посредника здесь и получить сжатые данные дампа SVN за один раз с использованием каналов или что-то? Это возможно? Какой будет синтаксис?
2 ответа
svnadmin dump
по умолчанию выдает дампы и 7z
Командная строка может читать со стандартного ввода, используя -si
переключатель
svnadmin dump c:\path\to\myrepo | 7z a -si svndump.7z
Поскольку ваш образец был именно тем, что я искал, это то, что я сделал как полное решение, чтобы "сбросить" все мои репозитории. Это решение создает дамп всех svn-репозиториев в 7-zip файл без несжатого промежуточного файла.
Поместите этот пакетный файл в свой "корень хранилища", например, m:\repositories\dump-all.bat
pushd %~dp0
SET SEVENZIP="c:\Program Files\7-Zip\7z.exe" a -mx1 -si
FOR /f "tokens=*" %%i in ('DIR /a:d /b') DO svnadmin dump %%i | %SEVENZIP% ..\_svndump\%%i.dump.7z
И, запустите этот пакет, как это, если вам нужно запустить его с низким приоритетом, оба процесса (7z + svnadmin) будут занимать много процессора
start /low m:\repositories\dump-all.bat
Примечания: "pushd %~dp0" устанавливает "текущий каталог" в том месте, где находится пакетный файл, вместо того, чтобы запускать его в "c:\windows\system32", если вы запускаете его из обозревателя с "Запуск от имени администратора". Это также работает, если рабочая папка находится на другом диске.
Нет необходимости вводить "m:" и "cd \repositories". если вы запустите его с диска "c:".