Cat*_*ton 1 ubuntu mac-osx gzip
我正在尝试压缩一个文件夹,以便我可以将其 FTP 到我的 Web 服务器。
我在 osx snow leopard 上压缩,在 ubuntu 8.04 上解压
这是我正在运行的两个命令
sudo git archive master | gzip > v-1.25.gz
sudo gunzip v1.25.gz
Run Code Online (Sandbox Code Playgroud)
当我在本地机器上解压时它工作正常,但在服务器上输出的是一个文件而不是一个目录
我究竟做错了什么?
如果您来自 Windows 世界,则习惯于使用诸如 zip 或 rar 之类的工具来压缩文件集合。在做一件事并做好一件事的典型 Unix 传统中,您往往有两种不同的实用程序;压缩工具和存档格式。人们然后将这两个工具一起使用以提供与 zip 或 rar 提供的相同功能。
有许多不同的压缩格式;目前在 Linux 上常用的是 gzip(有时称为 zlib)和更新的、性能更高的 bzip2。不幸的是,bzip2 使用更多的 CPU 和内存来提供更高的压缩率。您可以使用这些工具来压缩任何文件,按照惯例,由这些格式之一压缩的文件是 .gz 和 .bz2。您可以使用 gzip 和 bzip2 来压缩这些格式,使用 gunzip 和 bunzip2 来解压缩这些格式。
还有几种不同类型的存档格式可用,包括 cpio、ar 和 tar,但人们往往只使用 tar。这些允许您获取多个文件并将它们打包成一个文件。它们还可以包括路径和权限信息。您可以使用 tar 命令创建和解压 tar 文件。您可能会听到这些操作被称为“tarring”和“untarring”。(该命令的名称来自 Tape ARchive 的缩写。Tar 是对 ar 格式的改进,因为您可以使用它跨越多个物理磁带进行备份)。
# tar -cf archive.tar list of files to include
Run Code Online (Sandbox Code Playgroud)
这将创建 (-c) 并存档到名为 archive.tar 的文件 -f 中。(.tar 是 tar 档案的约定扩展名)。您现在应该有一个包含五个文件(“list”、“of”、“files”、“to”和“include”)的单个文件。如果你给 tar 一个目录,它会递归到那个目录并将所有东西存储在里面。
# tar -xf archive.tar
# tar -xf archive.tar list of files
Run Code Online (Sandbox Code Playgroud)
这将提取 (-x) 之前创建的 archive.tar。您可以通过在命令行末尾列出文件来仅从存档中提取所需的文件。在我们的示例中,第二行将提取“list”、“of”、“file”,但不会提取“to”和“include”。你也可以使用
# tar -tf archive.tar
Run Code Online (Sandbox Code Playgroud)
在提取内容之前获取内容列表。
所以现在你可以结合这两个工具来复制 zip 的功能:
# tar -cf archive.tar directory
# gzip archive.tar
Run Code Online (Sandbox Code Playgroud)
您现在将拥有一个 archive.tar.gz 文件。您可以使用以下方法提取它:
# gunzip archive.tar.gz
# tar -xf archive.tar
Run Code Online (Sandbox Code Playgroud)
我们可以使用管道来保存我们有一个中间的 archive.tar:
# tar -cf - directory | gzip > archive.tar.gz
# gunzip < archive.tar.gz | tar -xf -
Run Code Online (Sandbox Code Playgroud)
您可以使用 - 和 -f 选项来指定 stdin 或 stdout(tar 根据上下文知道哪一个)。
我们可以做得稍微好一点,因为,在稍微明显地打破“一项工作做好”的想法中,tar 能够通过使用 -z 参数来压缩其输出并解压其输入(我说很明显,因为它仍然使用幕后的 gzip 和 gunzip 命令行)
# tar -czf archive.tar.gz directory
# tar -xzf archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
要使用 bzip2 代替 gzip,请分别使用 bzip2、bunzip2 和 -j 代替 gzip、gunzip 和 -z (tar -cjf archive.tar.bz2)。某些版本的 tar 可以使用 -z 检测 bzip2 文件存档并做正确的事情,但养成明确的习惯可能是值得的。
回到你的特定问题。git archive 可以创建 tar 文件或 zip 文件。默认情况下,它会创建一个 tar 文件。
# git archive master | gzip > v-1.25.tar.gz
Run Code Online (Sandbox Code Playgroud)
这将创建一个压缩的 tar 存档。正如我们在上面看到的,我们可以使用以下方法提取它:
# tar -xzf v-1.25.tar.gz
Run Code Online (Sandbox Code Playgroud)
您还可以使用:
# git archive --format=zip master > v-1.25.zip
# unzip v-1.25.zip
Run Code Online (Sandbox Code Playgroud)
更多信息:
归档时间: |
|
查看次数: |
2850 次 |
最近记录: |