我想创建一个文件的tarball,但不包括目录名。我知道还有另一种方法,但我想知道为什么这种方式不起作用。
如果我运行以下命令来创建由特定文件组成的tarball,那么它可以工作:
tar -vcf file.tar -C <PATH TO DIR> file1
但是,如果我在外卡上运行它以包含多个文件,则它会失败:
tar -vcf file.tar -C <PATH TO DIR> *
我收到一条错误消息,对于当前目录中的每个文件(不是-C中指定的目录),tar: <FILE>: Cannot stat: No such file or directory
任何想法为什么在外卡上运行上述命令与文件名的行为有所不同?
答案 0 :(得分:4)
在调用*
之前,shell会扩展tar
通配符。 tar
然后更改目录(因为你要求它),但是后来找不到shell当前目录中的文件。
当然,更改shell中的目录意味着您无法在原始当前目录中打开输出文件。因此,您必须将子输出重定向到子shell之外,如下所示:
(cd $DIR; tar -vc *) > file.tar
答案 1 :(得分:0)
您必须使用目录:
tar -vcf files.tar /path/to/directory
如果您的文件位于文件夹中,请使用.
引用当前文件夹:
tar -vcf files.tar .