Как заархивировать указанные папки с помощью командной строки

StackOverflow https://stackoverflow.com/questions/1412051

Вопрос

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

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

Спасибо.

Это было полезно?

Решение

Вы можете сделать это с помощью Файл 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 мб.Вы можете использовать кб или гб, тоже.Или опустите символы для размера в байтах.И вы можете использовать < или = как операции.

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

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

  • 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, вы также можете:

  • укажите, хотите ли вы обходить точки повторной обработки (например, символические ссылки или соединения, например, "Моя музыка").
  • рекурсировать каталоги или нет (по умолчанию НЕТ)
  • зашифруйте zip-файл с помощью AES или "обычного" zip-шифрования
  • укажите размер сегмента для создания составного или сегментированного 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)"

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

DotNetZip является бесплатным.

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

Другие советы

Я использую программу с открытым исходным кодом 7Зип с помощью командной строки, подобной:

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

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

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

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

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

wzzip archive.zip dir1 dir2 dir3 ...

Вы можете загрузить 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 не изменился с предыдущего.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top