我知道使用拙劣的 unTAR 可以做到这一点,尽管我不记得确切的命令......但是是否可以“撤消”最近的“unzip”命令,在这种情况下,使用 mac 终端?
这是/usr/bin/unzip
在 10.7 上使用的,使用 UnZip 5.52。
假设我从这样的文件夹结构开始......
admin$ pwd
/usr/local/src
admin$ ls
pots pans scrubbers.zip
admin$ unzip scrubbers.zip
admin$ ls
pots pans scrubbers.zip
zebraturd.doc README.md morestuffididntmeantoputhere.py cleanme.junkmail
surfraw.2.html scrubbers.explaination
我怎样才能“重新压缩”或者反向解析 zip 文件?
在 zip 文件中,有一个部分列出了存档中的文件,尽管内容被严重损坏了...例如...
0L'†C 0L'†C !∏V≤B PK&Å‘:√@`¢îF3$ Lmacos/lib/libexiv2.2.1.0.dylib
如果不手动筛选该列表,是否有灵丹妙药可以解决这个问题?
答案1
你可以尝试
unzip -t zipfile.zip | awk '{print $2}' | tail -n +2 | xargs echo
或者
unzip -t zipfile.zip | awk '{print $2}' | sed 's/zipfile.zip//' | xargs echo
如果文件名中有空格
unzip -l zipfile.zip | tail -n +4 | head -n -2 | awk '{print "\""substr($0,index($0,$4))"\""}' | xargs rm
检查输出是否合理,然后更改echo
为rm
。特别检查您的 zip 文件是否未在输出中列出。这并不完美,因为它不会触及目录,但它可能比手动浏览所有内容更容易。
答案2
Iain 的回答在我的计算机上引发了一个与头部相关的错误,我无法弄清楚...所以我继续编写了一些包含他的部分解决方案的 BASH 脚本,并且运行得很好...只需将原始 zip 作为参数传递给这个解压文件脚本..注释掉 rm 行来预览“动作”。
#!/bin/bash
COUNT=0 # USAGE:
PURGE=CLEAR # chmod +x ununzip.sh && ./ununzip.sh file.zip
THATDARNzip=$1 # THIS IS YOUR file.zip, THE ARGUMENT
PURGE=(`unzip -t THATDARNzip | awk '{print $2}' | xargs echo`)
COUNT=${#PURGE[@]} # HOW MUCH STUFF GOT UNZIPPED?
echo "total items "$COUNT
echo -e "item at 0 is ${PURGE[0]}" # WE DON'T DELETE THE ORIGINAL ZIP FILE
while [ "$COUNT" -gt 0 ]; do
echo -e "deleting ${PURGE[${COUNT}]}"
rm -r "${PURGE[${COUNT}]}" # COMMENT THIS LINE FOR A DRY RUN
COUNT=$[ $COUNT - 1 ]
done
exit 0
答案3
我只是手动删除了垃圾文件,同时极力告诫自己没有先检查 zip 文件的格式是否合理(它们总是不合理的)unzip -l
。
答案4
尝试这个:
$ unzip -l scrubbers.zip | sed '1,3d' | sed 'N;$!P;$!D;$d' | awk '{ print $4 }' | xargs rm -fr