- Как использовать Unzip в Linux
- Системы Debian и Ubuntu
- Установите Unzip в Linux CentOS и Fedora
- Как использовать Zip и Unzip в Linux
- Создание Zip-файлов в Linux
- Использование Linux для распаковки файла
- Удалить файл из файла .zip
- Как обновить Zip-файлы
- Переместить файл в ZIP-архив
- Рекурсивное использование Zip в Linux
- Исключить файлы из ZIP-архива
- Распаковать в другой каталог
- Используйте Linux Unzip с несколькими Zip-файлами
- Подавить вывод при использовании распаковки в Linux
- Исключение файлов с помощью Unzip в Linux
- Использование Unzip в Linux с файлами, защищенными паролем
- Замена Zip-файлов
- Использование Linux Unzip без перезаписи файлов
- Как вывести список содержимого ZIP-архива в Linux
- Convert a Windows-created ZIP to Linux (internal paths issue)
- 7 Answers 7
Как использовать Unzip в Linux
Архивирование и разархивирование файлов упрощает множество сложных задач, таких как передача файлов! В этом руководстве вы узнаете, как использовать unzip в Linux для улучшения рабочего процесса VPS!
Zip — это часто используемая функция сжатия, которая портативна и проста в использовании. Вы даже можете распаковать в Windows файлы, созданные в Linux!
Unzip — это утилита, которая по умолчанию недоступна в большинстве разновидностей Linux, но ее легко установить. Создавая файлы .zip, вы можете соответствовать сжатию файлов .tar.gz!
Ниже приведены несколько сценариев, в которых вы можете использовать zip-файлы:
- Когда вы часто работаете между системами на базе Windows и Unix. Это не только сжимает файлы, но также является служебной программой для создания пакетов файлов. Работает на нескольких операционных системах
- Чтобы сэкономить трафик. Если у вас ограниченная или ограниченная пропускная способность, тогда zip может использоваться между двумя серверами для передачи файлов.
- Передает файлы быстро. Утилита Zip уменьшает размер файла, что сокращает время передачи
- Загружайте или скачивайте каталоги на более высокой скорости
- Экономьте место на диске
- Разархивируйте защищенные паролем файлы .zip
- Наслаждайтесь хорошей степенью сжатия
Помните, что прежде чем использовать Unzip в Linux, вам необходимо подключиться к серверу VPS по SSH.
Системы Debian и Ubuntu
Установить unzip очень просто! В Ubuntu и Debian используйте команду ниже для установки unzip:
Устройтесь поудобнее и подождите минуту, пока установка не будет завершена.
Чтобы создать zip-файлы, вам также необходимо установить zip. Вы можете сделать это с помощью следующей команды:
Установите Unzip в Linux CentOS и Fedora
Это снова просто и может быть выполнено с помощью следующей команды:
После завершения установки вы можете проверить путь с помощью следующей команды:
После того, как вы выполните указание в командной строке, вы должны получить следующий результат:
Вы также можете убедиться, что все установлено правильно, используя команду ниже. Это даст подробный отчет с подробностями утилиты распаковки.
Как использовать Zip и Unzip в Linux
Теперь, когда мы знаем, как установить утилиту, мы можем приступить к изучению ее основных способов использования:
Создание Zip-файлов в Linux
Базовый синтаксис для создания файла .zip:
zip options zipfile list_Of_files
Чтобы проверить это, мы создали два файла — ExampleFile.txt и ExampleFile1.txt . Мы сжимаем их в sampleZipFile.zip с помощью следующей команды:
zip sampleZipFile.zip ExampleFile.txt ExampleFile1.txt
Использование Linux для распаковки файла
Команду unzip можно использовать без каких-либо параметров. Это распакует все файлы в текущий каталог. Один из таких примеров показан ниже:
По умолчанию он будет распакован в текущую папку, если у вас есть доступ для чтения и записи.
Удалить файл из файла .zip
После создания файла .zip вы можете удалять или удалять файлы в нем. Итак, если вы хотите удалить ExampleFile.txt из существующего sampleZipFile.zip , вы можете использовать следующую команду:
zip –d sampleZipFile.zip ExampleFile.txt
После выполнения этой команды вы можете распаковать ZIP-файл, используя:
Здесь вы обнаружите, что файл ExampleFile.txt был удален и не отображается при извлечении.
Как обновить Zip-файлы
После создания файла .zip вы можете добавить новый файл к существующему файлу .zip. Предположим, необходимо добавить новый файл ExampleFile2.txt в уже существующий файл sampleZipFile.zip . Вы можете сделать это с помощью команды, показанной ниже:
zip –u sampleZipFile.zip ExampleFile2.txt
Теперь, если вы извлечете файл sampleZipFile.zip , вы обнаружите, что к нему добавлен новый файл ExampleFile2.txt.
Переместить файл в ZIP-архив
Вы можете легко переместить определенные файлы в zip-архив. Это означает, что после добавления файлов они будут удалены из исходных каталогов. Это в основном используется, когда у вас большой файл или каталог, но вам нужно сэкономить место на диске. Это делается путем добавления опции -m . Пример этой команды:
zip –m sampleZipFile.zip ExampleFile2.txt
Рекурсивное использование Zip в Linux
Параметр -r используется для рекурсивного архивирования файлов. Эта опция сжимает все файлы, находящиеся в папке. Пример такой команды показан ниже:
zip –r sampleZipFile.zip MyDirectory
В этом примере MyDirectory — это каталог, содержащий несколько файлов и подкаталогов для архивирования.
Исключить файлы из ZIP-архива
При создании файла .zip вы можете исключить ненужные файлы. Это делается с помощью опции -x . Ниже приведен пример:
zip -x sampleZipFile.zip ExampleFile.txt
Здесь ExampleFile.txt не будет добавлен в sampleZipFile.zip .
Распаковать в другой каталог
Если вы не хотите распаковывать в текущий каталог, но хотите указать местоположение каталога, это также можно сделать. Используйте параметр -d, чтобы указать путь к каталогу в команде unzip. Пример такой команды показан ниже:
unzip sampleZipFile.zip -d /usr/sampleZip/ExampleDir
Используйте Linux Unzip с несколькими Zip-файлами
Если вы хотите распаковать несколько zip-файлов, существующих в вашем текущем рабочем каталоге, вы можете использовать команду, как показано ниже:
Эта команда распакует все отдельные zip-файлы.
Подавить вывод при использовании распаковки в Linux
По умолчанию, когда мы используем команду unzip, она печатает список всех извлекаемых файлов. Распечатывается краткое описание процесса экстракции. Если вы хотите подавить эти сообщения, вы можете использовать опцию -q . Команда будет такой, как показано ниже:
Исключение файлов с помощью Unzip в Linux
Если вы хотите извлечь все файлы, кроме одного, вы можете использовать аналогичную команду, как показано ниже:
unzip sampleZipFile.zip -x excludedFile.txt
Здесь команда распакует все файлы, кроме excludedFile.txt .
Вы также можете предотвратить извлечение файлов определенных типов. Один из таких примеров показан ниже:
unzip sampleZipFile.zip -x "*.png/*"
Вышеупомянутая команда исключит из извлечения все файлы .png.
Использование Unzip в Linux с файлами, защищенными паролем
Защищенный паролем файл .zip можно распаковать с помощью параметра -P. Пример такой команды показан ниже:
unzip -P Password sampleZipFile.zip
В приведенной выше команде Пароль будет паролем для файла .zip.
Замена Zip-файлов
Когда вы снова разархивируете тот же файл в том же месте, где был извлечен файл, по умолчанию вы увидите сообщение с вопросом, хотите ли вы перезаписать текущий файл, перезаписать все файлы, пропустить извлечение для текущего файла, пропустить извлечение для всех файлов или переименовать текущий файл.
Варианты будут такими, как показано ниже:
Вы можете переопределить эти файлы, используя параметры -o . Один из таких примеров показан ниже:
Следует соблюдать осторожность при выполнении этой команды, поскольку это полностью перезапишет существующие копии. Любые изменения, внесенные в предыдущую копию, будут перезаписаны.
Использование Linux Unzip без перезаписи файлов
Если вы разархивировали файл и внесли некоторые изменения, но случайно удалили несколько файлов, вы можете использовать этот подход для его восстановления! Используйте параметр -n, чтобы пропустить извлечение, если файл уже существует. Таким образом, будут извлечены только файлы, которые не существуют. Пример такой команды:
Как вывести список содержимого ZIP-архива в Linux
Параметр -l перечислит все файлы в ZIP-архиве с отметкой времени и другими основными деталями. Пример такой команды:
Convert a Windows-created ZIP to Linux (internal paths issue)
I have a .zip created on a Windows machine (outside of my control). The zip file contains paths that I need to preserve when I unzip. However, when I unzip, all files end up like:
unzip_dir/\window\path\separator\myfile.ext I’ve tried both, with and without -j option. My issue is that I need that path information under \window\path\separator\ . I need that file structure to be created when I unzip. I can mv the file and flip the \ to / easily enough in a script, but then there are errors that the destination path directories do not exist. My workaround for now is to mkdir -p the paths (after converting \ to / ) and then cp the files to those paths. But there are a lot of files, and these redundant mkdir -p statements for every file really slows things down. Is there any more elegant way to convert a zip file with Windows paths to Linux paths?
Go Back to Windows. Tell whoever creates the Zip File not to use the Native Zip Interface, but a program like 7-Zip, and have them create a tar file. If that can’t be done you need to unzip the files while ignoring the path, using the unzip -j -d options. See Forcing Unzip — No Paths
Even with -j , I still get filename \window\path\separator\myfile.ext cause Linux/Zip don’t treat it as a paths. And I have absolutely no control over the zip file creation.
I have a hunch, that the zip file creator is using the native Windows Zip Interface, i.e, create an empty file and then adding files into the zip file. This method is not portable, as you have discovered. You need to use a program like WinZip or 7-Zip that has a CLI, like Anton used below. I just tried to use Zip.exe and got not recognized .
7 Answers 7
Use 7z rn to rename the files within the archive so that they have a forward slash. Then when you extract the archive, directories will be created.
To rename the files, list the paths of the files within the archive containing slashes, and generate a list of replacement strings that change the backslash to a slash using awk , for example.
7z rn windows.zip $(7z l windows.zip | grep '\\' | awk '< print $6, gensub(/\\/, "/", "g", $6); >' | paste -s)
I think something went wrong with the creation of the zip file, because when I create a zip file on Windows is has (portable) forward slashes:
zip.exe -r pip pip updating: pip/ (244 bytes security) (stored 0%) adding: pip/pip.log (164 bytes security) (deflated 66%)
But now that you have the files with file names that contain «paths» with backslashes, you can run the following program in unzip_dir :
#! /usr/bin/env python # already created directories, walk works topdown, so a child dir # never creates a directory if there is a parent dir with a file. made_dirs = set() for root, dir_names, file_names in os.walk('.'): for file_name in file_names: if '\\' not in file_name: continue alt_file_name = file_name.replace('\\', '/') if alt_file_name.startswith('/'): alt_file_name = alt_file_name[1:] # cut of starting dir separator alt_dir_name, alt_base_name = alt_file_name.rsplit('/', 1) print 'alt_dir', alt_dir_name full_dir_name = os.path.join(root, alt_dir_name) if full_dir_name not in made_dirs: os.makedirs(full_dir_name) # only create if not done yet made_dirs.add(full_dir_name) os.rename(os.path.join(root, file_name), os.path.join(root, alt_file_name))
This handles files in any directory under the directory from where the program is started. Given the problem that you describe, the unzip_dir probably doesn’t have any subdirectories to start with, and the program could just walk over the files in the current directory only.