tar unix 不改变目录

tar unix 不改变目录

我正在执行 tar 命令来压缩另一个目录中存在的文件。

我执行了以下命令:

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ *

我想创建 abc.tar.gz 文件,其中/backupmnt应包含/backupmnt/statusService/目录中的所有文件,但出现以下错误:

tar: components: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

components存在于我执行命令的当前目录中。以下是内容/backupmnt/statusService

SS-01:/ # ls /backupmnt/statusService
MJ.netact.xml.tar.gz      gmoTemp_fm.tar.gz  mr.properties.tar.gz  probe.properties.tar.gz  relay_logs.tar.gz  ss_logs.tar.gz  tomcat_conf.tar.gz
esymac_config.txt.tar.gz  gmoTemp_pm.tar.gz  o2ml.tar.gz           probes_logs.tar.gz       ss_conf.tar.gz     ss_pm.tar.gz    tomcat_logs.tar.gz

我不明白我错在哪里。

答案1

*tar在执行之前由 shell 展开。因此,tar更改目录会使*扩展为的参数无效。您可以简单地告诉tar压缩目录:

tar -czf /backupmnt/abc.tar.gz -C /backupmnt/statusService/ .

代表.当前目录,当tar目录改变时,它也会改变。这将导致隐藏文件(以 开头的文件.)被包含在存档中。

答案2

为什么不使用显式目录更改?

cd /backupmnt/statusService && tar -czf /backupmnt/abc.tar.gz *

或者您可以使用相对路径:

cd /
tar -czf /backupmnt/abc.tar.gz backupmnt/statusService1/* backupmnt/statusService2/* backupmnt/statusService3/*

这可能是更好的解决方案,因为您可以将文件分隔在文件夹中并避免覆盖重复的文件名

答案3

-C无论如何都不是一个便携式选项。这是一个 GNU 选项,而不是 UNIX 选项。

tar无论如何,单一 UNIX 规范不再指定,因为实现之间存在很大差异。它必须pax可移植地创建档案。

你可以这样做:

pax -ws '|.*//||' /backupmnt/statusService//. /some/other/dir//./*.ext |
  xz > file.tar.xz

(POSIX 未指定xz/ )。gzip

这是用来//.标记路径的哪一部分要被剥离。

相关内容