我有以下目录结构:
base/
files/
archives/
scripts/
我想要一个从 运行的脚本scripts/
,将匹配的文件压缩results.*.log
到files/
.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