zip -d因为set -f取消了通配符导致星号*不起作用

zip xxx.zip -d file_path可以把xxx.zip包里file_path这个路径的文件删除。
现在发现 zip -d删除zip包里文件的命令,有时候无法删除里面的文件。

有某zip文件,内容如下
unzip -l t.zip

Archive:  t.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  2019-04-19 16:12   d2/f
        0  2019-04-19 16:11   d2/
        0  2019-04-19 16:11   d1/
        0  2019-04-19 16:11   d1/s1/
        0  2019-04-19 16:12   d1/s1/f
        0  2019-04-19 16:12   d1/f
---------                     -------
        0                     6 files

set -f 取消使用通配符
set +f 使用通配符

$ set +f
$ zip t.zip  -d d1/*
deleting: d1/s1/
deleting: d1/f
$ set -f
$ zip t.zip  -d d1/*
deleting: d1/
deleting: d1/s1/f
deleting: d1/s1/
deleting: d1/f
  • 说明zip a.zip -d d/*无法删除d/下所有文件的原因和set ±f有关,和通配符是否生效有关。

怎么样能让zip -d删除zip内文件的命令在有无set ±f的情况下都生效呢?

$ set -f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d d1/*;
...
deleting: d1/
deleting: d1/s1/
deleting: d1/s1/f
deleting: d1/f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d "d1/*";
...
deleting: d1/
deleting: d1/s1/
deleting: d1/s1/f
deleting: d1/f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d d1/\*;
...
deleting: d1/
deleting: d1/s1/
deleting: d1/s1/f
deleting: d1/f
$ set +f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d d1/*;
...
deleting: d1/s2/
deleting: d1/s1/
deleting: d1/f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d d1/\*;
...
deleting: d1/
deleting: d1/s1/f
deleting: d1/s1/
deleting: d1/f
$ zip -ryu t.zip d1/ d2;unzip -l t.zip;zip t.zip -d "d1/*";
...
deleting: d1/
deleting: d1/s1/
deleting: d1/s1/f
deleting: d1/f

结论

不管有无set ±f,
zip a.zip -d d/\*
zip a.zip -d "d/*""
都能完整地删除 d/ 和d/下的所有文件和所有目录。

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值