Linux &引用;tar——目录";韩元';行不通
我想创建一个文件tarball,但不包括目录名。我知道还有另一种方法,但我想知道为什么这种方法不起作用 如果我运行以下命令来创建由特定文件组成的tarball,那么它可以工作:Linux &引用;tar——目录";韩元';行不通,linux,unix,tar,Linux,Unix,Tar,我想创建一个文件tarball,但不包括目录名。我知道还有另一种方法,但我想知道为什么这种方法不起作用 如果我运行以下命令来创建由特定文件组成的tarball,那么它可以工作: tar -vcf file.tar -C <PATH TO DIR> file1 tar-vcf file.tar-C file1 但是,如果我在通配符上运行它以包含多个文件,那么它将失败: tar -vcf file.tar -C <PATH TO DIR> * tar-vcf file.
tar -vcf file.tar -C <PATH TO DIR> file1
tar-vcf file.tar-C file1
但是,如果我在通配符上运行它以包含多个文件,那么它将失败:
tar -vcf file.tar -C <PATH TO DIR> *
tar-vcf file.tar-C*
我得到一个错误,对于当前目录中的每个文件(不是-C中指定的目录),tar::Cannot stat:没有这样的文件或目录
知道为什么在通配符上运行上述命令与在文件名上运行不同吗?您必须使用目录:
tar -vcf files.tar /path/to/directory
如果文件在文件夹中,则使用
引用当前文件夹:
tar -vcf files.tar .
在调用
tar
之前,shell将扩展*
通配符tar
然后更改目录(因为您要求它这样做),但随后无法找到shell当前目录中的文件
当然,更改shell中的目录意味着您无法在原始当前目录中打开输出文件。因此,您必须将tar的输出重定向到子shell之外,如下所示:
(cd $DIR; tar -vc *) > file.tar
对于您来说,这是一个更好的问题,您可能希望添加一些引号,并使用
&
仅在cd
成功时继续操作:(cd“$dir”&&exec tar-vc*)
;这样,如果目录名包含空格,我们就不会崩溃,我们不会超出必要的范围,如果子目录不存在或我们没有cd进入的权限,我们也不会尝试对当前目录加焦油。@CharlesDuffy我觉得这是在命令行上,因此a)我更喜欢写cd$DIR
而不是cd
b)无论如何,你都有可能完成目录。这解决了第一个问题。另外两个问题(特别是,如果使用;
而不是&&
时cd
命令失败,则会发出命令给当前目录加上焦油)。