как мне сжать / разархивировать в командной строке unix?

<p>как я могу создавать и извлекать zip-архивы из командной строки?</p>

<p>обычно используется <code>tar</code> для создания несжатого архива и либо <code>gzip</code>, либо <code>bzip2</code> для сжатия этого архива. соответствующие команды <code>gunzip</code> и <code>bunzip2</code> можно использовать для распаковки указанного архива, или вы можете просто использовать флаги в команде <code>tar</code> для выполнения распаковки.</p><p>если вы имеете в виду конкретно <a href="https://en.wikipedia.org/wiki/zip\_%28file\_format%29">формат zip-файла</a> , вы можете просто использовать команды <code>zip</code> и <code>unzip</code>.</p><p>сжать:</p><pre><code>zip squash.zip file1 file2 file3 </code></pre><p>или zip каталог</p><pre><code>zip -r squash.zip dir1 </code></pre><p>чтобы распаковать:</p><pre><code>unzip squash.zip </code></pre><p>это распакует его в ваш текущий рабочий каталог.</p>

<p>существует действительно <em>огромное</em> количество различных способов сжатия и распаковки под производными unix, поэтому я собираюсь предположить, что вы имели в виду "zip" в общем смысле, а не <em>специфично</em> формат файла.</p><p>вы можете сжать файлы (в сжатом формате) с помощью программы gnu <code>tar</code>):</p><pre><code>tar -zcvf myfile.tgz . </code></pre><p>который будет делать текущий каталог. заменить <code>.</code> с другими именами файлов, если вы хотите что-то еще.</p><p>чтобы распаковать этот файл, используйте:</p><pre><code>tar -zxvf myfile.tgz </code></pre><p>это предполагает, конечно, что у вас есть <code>tar</code>, способный выполнять сжатие, а также объединять файлы в один.</p><p>если нет, вы можете просто использовать <code>tar cvf</code> с последующим <code>gzip</code> (снова, если доступно) для сжатия и <code>gunzip</code> с последующим <code>tar xvf</code>.</p><hr><p>для конкретной обработки файлов в формате zip я бы рекомендовал скачать <code>7zip</code> и используя это - он распознает <em>огромное</em> разнообразие форматов файлов, включая zip.</p>

<p>если у вас не установлены пакеты zip и unzip, и у вас есть java, вы можете использовать <code>jar</code> для распаковки:</p><pre><code>jar -xf file.zip </code></pre>

<p>ну, когда дело доходит до распространения файлов для различных операционных систем, я бы рекомендовал <a href="http://7-zip.org">7-zip</a> .</p><p>обычно в пакете <code>p7zip</code>, вы получите <code>7z</code> а также <code>7za</code> команда, с помощью которой вы можете создавать свои собственные архивы 7z.</p><p><code>7za</code> также может распаковывать стандартные ( <a href="https://en.wikipedia.org/wiki/pkzip">pkzip</a> ) zip-архивы (и создавать их также с помощью <code>-tzip</code> переключатель).</p><p>сжимая:</p><pre><code>7za a archive.7z file1 file2 directory/ </code></pre><p>распаковка:</p><pre><code>7za x archive.7z </code></pre><p>он также может создавать самораспаковывающиеся архивы с помощью <code>-sfx</code> переключатель:</p><pre><code>7za a -sfx archive.exe files1 file2 dir </code></pre><p>я рекомендую этот метод, если пользователи windows не могут открыть архивы 7z (если вы хотите посоветовать инструмент для этого: <a href="http://www.peazip.org/">peazip</a> ).</p><p>если вы хотите использовать тот же алгоритм сжатия с вашими архивами, используйте <code>-j</code> переключайтесь с помощью <code>tar</code>:</p><pre><code>tar cjf archive.tar.xz file1 file2 dir </code></pre><p> <a href="https://tukaani.org/xz/"><code>xz</code></a> - инструмент unix, который использует lzma2 для сжатия, но работает так же, как <code>gz</code>, <code>bz2</code> и т. д. работает. это даже работает как фильтр.</p><p>7z не создает архивы с полной информацией о файловой системе в unix, поэтому вам нужно использовать <code>tar</code> перед использованием 7z (но поскольку 7z хранит другую информацию о файле <code>tar</code>, я бы порекомендовал используя <code>xz</code>, как он предназначен для этого):</p><pre><code>tar cf - file1 file2 dir | 7za z -si archive.tar.7z </code></pre>

<pre><code>unzip <filename> </code></pre><p>а также</p><pre><code>zip -r archive.zip <filename> [filename] </code></pre><p>вам нужно убедиться, что эти команды установлены через менеджер пакетов. это не сложнее, чем использовать что-либо еще в командной строке. это, конечно, проще, чем создавать архивы с помощью tar.</p>

<p>bsd tar также может сделать это</p><pre><code>bsdtar -a -c -f sunday.zip sunday.jpg </code></pre><p>или:</p><pre><code>bsdtar -x -f sunday.zip </code></pre>

<p>самый стандартный ответ --- <a href="http://en.wikipedia.org/wiki/pax\_(unix)"><code>pax</code></a> , который рекомендуется более <a href="http://en.wikipedia.org/wiki/cpio"><code>cpio</code></a> и <a href="http://en.wikipedia.org/wiki/tar\_(file\_format)"><code>tar</code></a> ,.</p><p>в отличие от <code>cpio</code> и posix <code>tar</code>, но вроде gnu <code>tar</code>, <code>pax</code> умеет архивировать файлы и сжимать архив. это поведение отличается от <a href="http://en.wikipedia.org/wiki/zip\_(file\_format)"><code>zip</code></a> , который сжимает каждый файл перед тем, как поместить его в архив.</p>

<p>это касается только добычи.</p><p>для этого я начал использовать <a href="https://brettcsmith.org/2007/dtrx/"><code>dtrx</code></a> .</p><p>весь смысл в том, чтобы устранить сложность. таким образом, вы просто передаете в него любой архив, и он выясняет, что с ним делать. zip, tar, gz ... использование всегда одинаково - <code>dtrx archive.zip</code>. он задает несколько вопросов, и все готово.</p><p><code>dtrx</code> доступно в большинстве репозиториев, поэтому вы можете <code>apt</code> | <code>yum</code> установить его.</p>

<p>я часто пытаюсь заархивировать измененные файлы в моем рабочем каталоге - либо скопировать все измененные файлы в другой рабочий каталог песочницы, либо сохранить их ненадолго, потому что я хочу отменить некоторые изменения.</p><p>в этом случае я копирую список измененных файлов во временный файл и использую <code>zip</code> с параметром <code>-@</code>.</p><p>допустим, я изменил файлы foo.h, bar.cc и testbar.cc.</p><p>допустим, я создал файл с именемified-files.txt, содержимое которого:</p><pre><code>foo.h bar.cc testbar.cc </code></pre><p>я выполняю следующую команду, чтобы сжать эти файлы:</p><pre><code>cat modified-files.txt | zip modified-files.zip -@ </code></pre>