V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
V2Yamato
V2EX  ›  Linux

Tar 压缩时 -C *的问题

  •  
  •   V2Yamato ·
    V-Yamato · 2019-03-25 20:20:52 +08:00 · 2860 次点击
    这是一个创建于 2072 天前的主题,其中的信息可能已经有所发展或是发生改变。
    在用 tar 命令压缩指定目录下的文件时:
    tar -zcvf -C /home /test/test.*
    发现输出的是 test.* not found,去掉-C 指定的目录直接 /home/test/test.*就可以,是这里的*被转义了?
    第 1 条附言  ·  2019-03-26 19:59:12 +08:00
    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,但是还是很奇怪!
    7 条回复    2019-03-27 16:26:36 +08:00
    mikeguan
        1
    mikeguan  
       2019-03-25 20:40:40 +08:00 via Android
    花式使用命令还是 man 看下比较好
    一般-f 后面接要操作的文件 -C 是指定目录
    GTim
        2
    GTim  
       2019-03-25 20:50:01 +08:00
    如楼上说说,那个,`tar --help` 就有结果啦

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

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

    通配符展开是 shell 做的,tar 看到的已经是展开后的文件名列表了。当不加-C 时,通配符展开后的第一个文件成了-f 的参数,剩下的文件被视为要打包的文件列表。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2892 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 15:01 · PVG 23:01 · LAX 07:01 · JFK 10:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.