我将tar命令传递给应用程序中的shell执行程序。但似乎我的tar语法不正确。 (这是Windows(bsdtar
命令),但据我所知,它与Linux的工作方式相同;如果需要,我也可以在Linux上进行测试。)
我试图将所有以ext结尾的文件中的所有内容tar,而不将完整路径存储在我的tar文件中。
tar -cvzf test.tar.gz -C C:/mydir/toTar/ *.ext
我收到错误:
tar: *.ext: Cannot stat: No such file or directory
我可以提供整个路径,但我的tar将包含C->mydir->toTar->
。我只想要文件,而不是结果中的mydir
和toTar
。
到目前为止,只有接近我想要的东西是.
而不是*.ext
,但那也是其他的东西,我显然不想要。
答案 0 :(得分:3)
问题是*
是一个由shell扩展的通配符,但是你绕过shell并直接调用tar
。 tar
命令正在查找一个名为*.ext
的文件,但该文件不存在。
您的选择是:
tar
。/bin/sh -c tar ...
使用选项2可能会产生安全隐患 - 如果shell看到它认为是命令的内容,它将运行它。选项1因此更安全,但它更适合您,这更有意义。
答案 1 :(得分:1)
我对你在一个看似类似Linux的环境中如何使用dos风格的路径感到困惑。但这就是我要做的。如果细节可能不正确,希望这个概念很清楚。
cd C:/mydir/toTar/
mkdir ~/tmpwork
find . -name '*.ext' > ~/tmpwork/extfiles
tar czvfT ~/tmpwork/test.tar.gz ~/tmpwork/extfiles
rm ~/tmpfiles/extfiles
答案 2 :(得分:-1)
如果不使用管道等,就无法进行shell扩展。