..
[Linux]压缩包解压后撤销
当你在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解压缩的话,可以放心地用文章开头的后悔药,保证能删干净且不会出现这个报错。