Как сжать указанные папки с помощью командной строки - PullRequest
2 голосов
/ 11 сентября 2009

Не могли бы вы, люди, скажите мне, как сжать указанные файлы в тот же файл Zip. Позвольте мне рассказать, как мои папки заполнены:

  • В планировщике заданий есть резервные копии моих баз данных, и они ежедневно сохраняются в файл. Ежедневно создается 4 резервных копии базы данных, что означает, что ежедневно будет еще 4 файла. Поэтому мне нужно сжать вновь созданные резервные копии в один и тот же zip-файл (конечно, он отличается от zip-файла предыдущего дня, zip-файл будет создан для этого дня для вновь создаваемых файлов резервных копий), и мне нужно сделать это автоматически. Ну, я знаю, как сделать это автоматически. Я могу использовать планировщик задач Windows для автоматизации вещей.

Спасибо.

Ответы [ 5 ]

11 голосов
/ 11 сентября 2009

Я использую программу с открытым исходным кодом 7Zip с командной строкой вроде:

"C:\Program Files\7-Zip\7z.exe" a My.zip MyFileOrFolder

Если вы используете раздел NTFS, это может также решить вашу проблему, чтобы Windows автоматически сжимала папку, в которой находятся файлы резервной копии (щелкните правой кнопкой мыши папку, выберите «Свойства», «Дополнительно» и нажмите «Сжать содержимое для защиты данных»). .

5 голосов
/ 15 сентября 2009

Вы можете сделать это с помощью DotNetZip - изначально он создавался как библиотека для использования программистами, но примеры приложений, созданные и поставляемые с библиотекой, стали очень полезными сами по себе.

Один из «примеров» называется zipit.exe - консольный инструмент. Укажите несуществующий zip-файл для создания нового или укажите существующий zip-файл для его обновления.

zipit.exe ZipArchive.zip  c:\data\folder1

Вы можете указать одно или несколько имен файлов, каталогов или логическое выражение, которое описывает, какие файлы включать. Для выражений:

  • name = *.jpg
    любой файл .jpg.

  • mtime > 07/01/2009
    любой файл с последним измененным временем после полуночи 1 июля 2009 года. Существует также ctime и atime для времени создания и времени доступа.

  • ctime > 07/01/2009:07:53:00
    любой файл с созданным временем после 7:53 1 июля 2009 г.

  • size > 320mb
    любой файл размером более 320мб. Вы также можете использовать kb или gb . Или пропустите символы для размера в байтах. И вы можете использовать <или = как операции. </p>

  • attr != H
    любой файл, для которого не установлен атрибут Hidden. Другие атрибуты включают S = system, R = Только чтение, A = Архив. Конечно, вы можете проверить, что атрибут также включен (используя = вместо! =).

  • attr != H and size > 320mb
    включите файлы, которые удовлетворяют обоим условиям. Вы также можете использовать ИЛИ в качестве соединения. Используйте скобки для группировки сложных выражений.

  • name = *.jpg or name = *.gif
    включите файлы, которые удовлетворяют одному или другому условию.

  • (name = *.jpg) or (name = *.gif)
    такой же, как указано выше.

  • (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    любой файл, измененный 1 июля. С полуночи до полуночи.

  • (name = *.jpg) AND (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    любой файл .jpg, измененный 1 июля.

  • (name = *.jpg) and (size >= 100kb) and (mtime >= 07/01/2009) and (mtime < 07/02/2009)
    любой файл .jpg размером 100 КБ или более, измененный 1 июля.

С помощью других параметров инструмента zipit.exe вы также можете:

  • укажите, хотите ли вы пересечь точки повторного анализа (например, символические ссылки или соединения, например «Моя музыка»).
  • каталоги рекурсии или нет (по умолчанию НЕ)
  • шифрование почтового индекса с помощью AES или с помощью «обычного» почтового шифрования
  • указать размер сегмента для создания составного или сегментированного zip-файла.
  • создать самораспаковывающийся архив

Примеры:

zipit.exe Archive.zip -D c:\project1 -r+ "(name = *.xlsx) and (mtime >= 07/01/2009) and (mtime < 07/31/2009)"

  • Создайте файл Archive.zip, содержащий все файлы .xslx в иерархии каталогов c: \ project1, которые были изменены в июле.

zipit.exe Unpack.exe -sfx w -D project2 -r+ "(name = *.pdf) and (size > 100kb)"

  • Создайте самораспаковывающийся exe-файл GUI с именем Unpack.exe, содержащий все файлы .pdf в иерархии каталогов project2, размер которых превышает 100 КБ.

DotNetZip бесплатен.

Все эти функции также доступны в .NET-интерфейсе библиотеки. И еще есть инструмент с графическим интерфейсом.

3 голосов
/ 15 сентября 2009

Я отказался от WinZip в пользу 7-Zip , потому что он быстрый, бесплатный, эффективный и доступен как для Windows, так и для Linux.

Если вы являетесь поклонником WinZip, взгляните на дополнение к командной строке WinZip: http://winzip.com/prodpagecl.htm

Вы можете архивировать столько файлов или каталогов, сколько позволит ваша командная строка Windows:

wzzip archive.zip dir1 dir2 dir3 ...
2 голосов
/ 11 сентября 2009

Вы можете скачать GNU zip для Windows по адресу http://gnuwin32.sourceforge.net/packages/zip.htm. Если вы хотите получить весь маршрут командной строки UNIX, zip доступен с http://www.cygwin.com/.

На странице руководства приведен пример, который, похоже, решает вашу проблему, есть также много других параметров командной строки:

Например, если foo.zip существует и содержит foo / file1 и foo / file2, а каталог foo содержит файлы foo / file1 и foo / file3, затем:

      zip -r foo.zip foo

или более кратко

      zip -r foo foo

заменит foo / file1 в foo.zip и добавит foo / file3 в foo.zip. После этого, foo.zip содержит foo / file1, foo / file2 и foo / file3, при этом foo / file2 не изменился с до этого.

1 голос
/ 11 сентября 2009

Посмотрите на старую программу под названием PKZIP. Я полагаю, что вы также можете сделать это с WinZip и 7Zip.

...