Question Comment "annuler" un "décompresser" effectué dans un terminal / CLI?


Je sais que cela est possible avec un untAR bâclé, bien que je ne puisse pas me rappeler la commande exacte .... mais est-il possible d'annuler une commande "unzip" récente, dans ce cas, en utilisant le terminal mac?

Ceci utilise /usr/bin/unzip le 10.7, avec UnZip 5.52.

Disons que j'ai commencé avec une structure de dossier comme celle-ci ....

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

comment puis-je juste "rezip" ou analyser le fichier zip à l'envers?

il y a une section dans le fichier zip qui liste en quelque sorte les fichiers de l'archive, bien que très sérieusement endommagée .. par exemple ..

 0L'†C  0L'†C  !∏V≤B PK&Å‘:√@`¢îF3$ Lmacos/lib/libexiv2.2.1.0.dylib

sans passer au crible manuellement dans cette liste, existe-t-il une solution miracle à cet égard?


5
2017-08-22 11:12


origine




Réponses:


Tu pourrais essayer

unzip -t zipfile.zip | awk '{print $2}' | tail -n +2 | xargs echo

ou

unzip -t zipfile.zip | awk '{print $2}' | sed 's/zipfile.zip//' | xargs echo

et si vous avez des espaces dans les noms de fichiers

unzip -l zipfile.zip | tail -n +4 | head -n -2 | awk '{print "\""substr($0,index($0,$4))"\""}' | xargs rm

vérifier que la sortie est sensible et ensuite changer echo pour rm. En particulier, vérifiez que votre fichier zip ne figure pas dans la sortie. Ce n'est pas parfait car cela laissera les répertoires intacts, mais cela sera peut-être plus facile que de parcourir tout cela à la main.


10
2017-08-22 11:30



Je ne pense pas que cela fonctionnerait s'il y avait des espaces dans les noms de fichiers, bien que je ne puisse pas penser à une meilleure réponse par la tête ... - Stephen Darlington
@StephenDarlington: vous avez raison et quelle douleur de contourner le problème! - Iain


La réponse de Iain a jeté une erreur liée à la tête sur ma machine que je ne pouvais pas comprendre ... alors je suis allée de l'avant et j'ai écrit le petit script BASH qui inclut une partie de sa solution et qui fonctionne assez bien ... il suffit de passer le zip d'origine comme argument à cette ununzip.sh script .. Commentez la ligne rm pour avoir un aperçu de "l'action".

#!/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

5
2017-08-22 12:19



Le cerveau s'estompe de ma part - aurait dû être un ordre de queue. - Iain
Oh, et pour le compte rendu, tout cela peut être évité en passant le -e $DIR option avec unzip. par exemple unzip -e folderInThisDir ZIPinThisFolder.zip - mralexgray


Je supprime simplement manuellement le fichier crud, tout en me réprimandant avec véhémence de ne pas avoir vérifié que le fichier zip était sensé se former (ce qu’ils ne sont pas toujours) avec unzip -l premier.


3
2017-08-22 11:15





Essaye ça:

$ unzip -l scrubbers.zip | sed '1,3d' | sed 'N;$!P;$!D;$d' | awk '{ print $4 }' | xargs rm -fr

3
2017-08-22 11:47



Cela pourrait marcher, mais je ne serais jamais tenté de / essayer / quoi que ce soit avec un rm -fr à la fin. - EightBitTony
Il suffit de couper le xargs: $ unzip -l scrubbers.zip | sed '1,3d' | sed 'N;$!P;$!D;$d' | awk '{ print $4 }'. - quanta