技术解析

Tar 压缩时 -C *的问题
0
2021-06-21 03:49:48
idczone
在用 tar 命令压缩指定目录下的文件时:
tar -zcvf -C /home /test/test.*
发现输出的是 test.* not found,去掉-C 指定的目录直接 /home/test/test.*就可以,是这里的*被转义了?
花式使用命令还是 man 看下比较好
一般-f 后面接要操作的文件 -C 是指定目录

如楼上说说,那个,`tar --help` 就有结果啦
-C Change to before processing remaining files

tar -zcvf -C /home test/test.*




[email&ls -l /home/root/test/
-rw-r--r-- 1 root root 0 Jan 1 00:09 1
-rw-r--r-- 1 root root 0 Jan 1 00:10 1.1
-rw-r--r-- 1 root root 0 Jan 1 00:10 1.2
-rw-r--r-- 1 root root 0 Jan 1 00:10 1.3
-rw-r--r-- 1 root root 0 Jan 1 00:10 1.4
-rw-r--r-- 1 root root 0 Jan 1 00:09 2
-rw-r--r-- 1 root root 0 Jan 1 00:09 3
-rw-r--r-- 1 root root 0 Jan 1 00:09 4
[email&tar -zcvf test.tar.gz -C /home/root/ test/1.*
tar: test/1.*: No such file or directory
tar: error exit delayed from previous errors
感觉像是在解析语义的时候出现了问题,如果在压缩时不使用-C:
[email&tar -zcvf test.tar.gz /home/root/test/1.*
tar: removing leading '/' from member names
home/root/test/1.1
home/root/test/1.2
home/root/test/1.3
home/root/test/1.4
虽然在压缩的时候我没见过有人用-C,但是还是很奇怪!

试了下,感觉应该是*没有正常被展开,直接查找 1.*这个文件了,查找不到文件报错
后面指定具体文件名是可以打包的

其实问题的原因就是通配符补全是由 shell 做的,不能理解 tar 的 -C 参数,只会在 working directory 下找

楼主的用法是错的。-f 参数后面应该直接跟压缩文件的名字,比如:
tar -zcvf my-archive.tar.gz -C /home /test/test.*
通配符展开是 shell 做的,tar 看到的已经是展开后的文件名列表了。当不加-C 时,通配符展开后的第一个文件成了-f 的参数,剩下的文件被视为要打包的文件列表。

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服