Tar 压缩时 -C *的问题

2019-03-25 20:20:52 +08:00
 V2Yamato
在用 tar 命令压缩指定目录下的文件时:
tar -zcvf -C /home /test/test.*
发现输出的是 test.* not found,去掉-C 指定的目录直接 /home/test/test.*就可以,是这里的*被转义了?
2896 次点击
所在节点    Linux
7 条回复
mikeguan
2019-03-25 20:40:40 +08:00
花式使用命令还是 man 看下比较好
一般-f 后面接要操作的文件 -C 是指定目录
GTim
2019-03-25 20:50:01 +08:00
如楼上说说,那个,`tar --help` 就有结果啦

-C <dir> Change to <dir> before processing remaining files
billlee
2019-03-25 21:28:47 +08:00
tar -zcvf -C /home test/test.*
V2Yamato
2019-03-26 19:58:57 +08:00
@mikeguan
@GTim
@billlee

root@DR02:/tmp# 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
root@DR02:/tmp# 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:

root@DR02:/tmp# 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,但是还是很奇怪!
mikeguan
2019-03-26 21:34:59 +08:00
试了下,感觉应该是*没有正常被展开,直接查找 1.*这个文件了,查找不到文件报错
后面指定具体文件名是可以打包的
billlee
2019-03-26 21:43:25 +08:00
@V2Yamato #4 其实问题的原因就是通配符补全是由 shell 做的,不能理解 tar 的 -C 参数,只会在 working directory 下找
raysonx
2019-03-27 16:26:36 +08:00
楼主的用法是错的。-f 参数后面应该直接跟压缩文件的名字,比如:

tar -zcvf my-archive.tar.gz -C /home /test/test.*

通配符展开是 shell 做的,tar 看到的已经是展开后的文件名列表了。当不加-C 时,通配符展开后的第一个文件成了-f 的参数,剩下的文件被视为要打包的文件列表。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/548453

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX