我有以下目录结构:
base/
files/
archives/
scripts/
Run Code Online (Sandbox Code Playgroud)
我想一个脚本来运行的scripts/,压缩文件,那场比赛results.*.log中files/为gzip压缩tar归档文件中archives/。
我正在尝试以下命令:
tar czfC ../archives/archive.tar.gz ../files results.*.log
Run Code Online (Sandbox Code Playgroud)
但我得到
tar: results.*.log: Cannot stat: No such file or directory
tar: Exiting with failure status due to previous errors
Run Code Online (Sandbox Code Playgroud)
尽管
tar czfC ../archives/archive.tar.gz ../files results.a.log
Run Code Online (Sandbox Code Playgroud)
按预期工作。还
tar czf ../archives/archive.tar.gz ../files/results.*.log
Run Code Online (Sandbox Code Playgroud)
以我想要的方式工作,除了它将前缀添加files/到文件并发出警告:
tar: Removing leading `../' from member names
Run Code Online (Sandbox Code Playgroud)
所以我的结论是,tar使用该-C选项时,globbing 无法正常工作。关于如何以简单的方式完成这项工作的任何建议?
以更便携的方式编写它:
(cd ../files && tar cf - results.*.log) |
gzip -9 > ../archives/archive.tar.gz
Run Code Online (Sandbox Code Playgroud)
没有“焦油通配”,通配是由外壳完成的。并且 shell 不知道tar -C somedir会在 中完成它的工作somedir,任何 glob 都在当前目录中展开。