如何使用“更改目录”选项使 tar 通配符工作

Yuv*_*val 9 tar wildcards

我有以下目录结构:

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 无法正常工作。关于如何以简单的方式完成这项工作的任何建议?

Sté*_*las 6

以更便携的方式编写它:

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


von*_*and 5

没有“焦油通配”,通配是由外壳完成的。并且 shell 不知道tar -C somedir会在 中完成它的工作somedir,任何 glob 都在当前目录中展开。

  • shell 接受命令,在当前目录中展开 globs,从上面生成参数,然后启动 `tar` 程序,该程序稍后更改目录。不能“解决”你的问题,抱歉。唯一的出路是移动到您想要 glob 的目录,或者在目录中进行 globbing 并将其结果保存在文件或变量中。 (2认同)