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/下的所有文件和所有目录。