我有一个在 Linux 机器上生成的 tar。我需要将该 tar 的一部分上传到另一台 Linux 机器上。完整的 tar 文件很大,需要几个小时才能上传。我现在在 Mac OSX 机器上,这是我的问题:
- 我将 tar 解压到一个文件夹并找到需要上传到新服务器的内容
- 我创建了一个较小的 tar,其中仅包含我要上传的内容。
- 我将其上传并解压到新的 Linux 机器上
- 当我查看服务器时,它充满了
._
文件。对于上传的每个文件,都有一个._
文件,例如text1.txt
,._text1.txt
,text2.txt
,._text2.txt
...
OSX 将这些文件包含在 tar 中。
我尝试过这样做
tar --exclude='._*' -cvf newTar .
无差异。
我现在无法通过 ssh 访问新服务器。
我能做什么来解决这个问题?如何生成干净的 tar.gz 文件?
答案1
._ 文件是 OS Xbsdtar
处理 OS X 特定的扩展属性和资源分支的方式。 (这是一种称为 AppleDouble 的机制,实际上它不仅仅适用于 TAR 存档,还可以在多种存储格式中找到,而这些格式中没有用于保存 MacOS 资源分支和 Finder 信息的本机机制。)
为了防止它们被添加到 tar 文件中,您可以将其COPYFILE_DISABLE=1
作为环境变量传递给 tar。
COPYFILE_DISABLE=1 tar cf newTar.tar /your/files
答案2
据我了解,tar --exclude='._*' -cvf newTar .
应该有效:Finder 创建._*
文件但newTar
不应包含它们。
但是您可以通过在直通模式下调用 tar 来完全绕过这些文件。例如,要仅复制oldTar
下的文件some/path
,请使用
tar -cf newTar --include='some/path/*' @oldTar
答案3
那些以“._*”开头的文件是苹果特定位置指示符文件,根据这个帖子显然,在登录到 OSX 终端时,您无法摆脱它们,再次根据同一页面。您需要将文件上传到非苹果操作系统,删除这些文件并再次打包它们。这似乎是唯一的解决方案。