..

Linux压缩包解压后撤销

分类:Linux

标签:#Linux#tar#zip

当你在linux中解压时忘记指定目录,导致文件在当前目录到处都是时,后悔药如下:

撤销zip解压缩

zipinfo -1 path/xx.zip | xargs -d '\n' rm -rf

撤销tar解压缩

tar -tf xx.tar | xargs -d '\n' rm -rf

如果你运行上述命令但是出现如下报错时

rm: refusing to remove '.' or '..' directory: skipping './' 

其实是触发了linux系统的保护机制。因为很多以相对路径打包的 tar 文件中,列表的第一项就是一个.或者 ./,用来代表当前目录。

由于xargs命令会把这个列表里的每一项依次递交给rm -rf执行。

所以,这行命令在执行时,其实等同于触发了rm -rf ./,如果没有保护机制,它会把执行命令的当前目录删光。

不过现代的rm命令内置了安全网(Safety Net)。它检测到你要删除.或..时,会拦截并拒绝执行,从而避免了把当前目录全部删光。

所以其实撤销解压缩的命令已经执行成功了,报错只是因为触发了系统的保护机制。

如果你想在撤销解压缩时不报错,可以尝试如下命令:

tar -tf xx.tar | grep -v '^\./$' | xargs -d '\n' rm -rf

这个错误大概只有用tar的时候会触发,如果你是用zip解压缩的话,可以放心地用文章开头的命令,应该能删干净且不会出现这个报错。