Как заархивировать указанные папки с помощью командной строки
-
05-07-2019 - |
Вопрос
Не могли бы вы, люди, подсказать мне, как заархивировать указанные файлы в один и тот же 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.