如何使 tar 通配符与“更改目录”选项一起使用

如何使 tar 通配符与“更改目录”选项一起使用

我有以下目录结构:

base/
   files/
   archives/
   scripts/

我想要一个从 运行的脚本scripts/,将匹配的文件压缩results.*.logfiles/.gzip 压缩的 tar 存档中archives/

我正在尝试以下命令:

tar czfC ../archives/archive.tar.gz ../files results.*.log

但我得到

tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors

尽管

tar czfC ../archives/archive.tar.gz ../files results.a.log

按预期工作。还

tar czf ../archives/archive.tar.gz ../files/results.*.log

按照我想要的方式工作,除了它向文件添加前缀files/并发出警告:

tar: Removing leading `../' from member names

所以我的结论是,tar使用该选项时通配符无法正常工作-C。关于如何以简单的方式完成这项工作有什么建议吗?

答案1

以更便携的方式编写它:

(cd ../files && tar cf - results.*.log) | 
  gzip -9 > ../archives/archive.tar.gz

答案2

不存在“tar 通配符”,通配符是由 shell 完成的。 shell 不知道tar -C somedir将在 中完成其工作somedir,任何 glob 都会在当前目录中展开。

答案3

我终于用了

tar czfC ../archives/archive.tar.gz ../files `find ../files/results.*.log -printf "%f\n"`

答案4

这样做的方法是编写如下内容:

#!/bin/sh

cd ../files
tar zcf ../archives/archive.tar.gz results.*.log
cd ../scripts

相关内容