如何在Mac上创建一个Linux兼容的zip压缩包,以备份一个目录

6
我曾尝试多种在Mac上使用GUI或命令行创建zip或tar.gz文件的方法,也尝试在Linux上进行解压,但遇到各种错误,例如在目录中同时出现“File.XML”和“File.xml”,或者有关某些内容被截断等等。
不列举我在Mac和Linux上使用tcsh命令行的所有实验,以下是2个可靠的命令:
1)制作一个目录的zip文件(无__MACOSX文件夹)
2)在Linux上解压Mac的zip文件,无错误出现(无__MACOSX文件夹)
Linux端的IT工作人员说他们通常使用.gz文件,并使用gzip和gunzip命令。
谢谢!
3个回答

6
经过大量研究和实验,我发现以下方法每次都可行:
1)在Mac的终端中使用以下命令创建一个带压缩包的tar文件: tar -cvzf your_archive_name.tar.gz your_folder_name/ 2)当你从一个服务器向另一个服务器传输文件时,请确保打开了二进制模式。
3)在Linux服务器上的shell中(在此例中为tcsh),分两步解压缩: gunzip your_archive_name.tar.gz tar -xvf your_archive_name.tar

只需执行 tar xvfz ... 即可解压缩。z 会调用 gzip 帮你完成,这样就避免了创建一个大的中间 .tar 文件。 - Mark Adler
这并不会阻止资源叉/扩展属性信息被放入tar文件中,这些信息会显示为“._*”文件。它也不会防止.DS_Store文件被归档。请参见我的答案以了解如何避免这些问题。 - Mark Adler
它也不是一个“压缩”文件,至少按照“压缩”的传统定义来说不是。.zip文件是使用PKZIP或任何基于Info-Zip包的实用程序(包括zip/unzip和WinZIP)进行压缩的。gzip使用相同的压缩方案,但它不会存档。它的用例是作为tar的过滤器。更近期的附加“压缩”,包括bzip2(另一个仅限压缩器)和7Zip(归档+压缩),只会让事情变得更加混乱。 - Joe Sewell

2

我在我的Mac和ssh bash中使用以下简单命令:

Original Answer翻译成“最初的回答”:

Create Zip File (-czf)
tar -czf NAME.tgz FOLDER
Extract Zip File (-xzf)
tar -xzf NAME.tgz

最初的回答
最好,迈克

1
首先,File.XMLFile.xml不能同时出现在HFS+文件系统中。虽然有可能某人会格式化一个区分大小写的HFSX文件系统来允许这样做,但这种情况非常罕见。您真的可以创建两个这样的文件并将它们分别列出吗?
您可以使用zip-X选项防止保存资源fork和扩展属性。您还可以添加-x .DS_Store来摆脱这些文件。
对于tar,请在其前面加上COPYFILE_DISABLE=truesetenv COPYFILE_DISABLE true,具体取决于您的shell。您还可以添加--exclude=.DS_Store
您的“IT工作人员”给出了一个相当无用的答案,因为gzip只能压缩一个文件。gzip必须与tar结合使用才能归档目录。

在我的 Mac 上,我有大小写混合的 XML 和 xml 文件。为了脚本,我通过将它们全部重命名为小写来使它们规范化。在尝试压缩文件时,我忘记了哪一个,但是在 Linux 系统上解压缩时两个文件都在里面!经过多次尝试和错误,我终于有了一个可行的解决方案。我会在下面发布它。 - dbonneville
Linux确实允许文件名仅在大小写上有所不同。为了实现这一点,您需要在Mac上的不同目录中存档两个文件,它们的名称仅在大小写上有所不同(因为它们不能同时存在于同一目录中),然后将它们解压缩到Linux上的同一目录中。 - Mark Adler
我的当前语句是“tar -cvzf archive.tar.gz my_folder/”。我该如何集成-x选项?我尝试了一下,它说我不能同时使用c和x。 - dbonneville
你需要更仔细地阅读答案。-x 是用于 zip 的。对于 tar,你需要使用 --exclude - Mark Adler
谢谢,我错过了那个! - dbonneville

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接