Habituellement, je désarchive les choses, $ mkdir newFolder; $ mv *.zip newFolder; $ cd newFolder; $unzip *.zip
mais parfois je deviens paresseux et je le fais simplement dans un dossier arbitraire, de $ unzip *.zip
sorte que de temps en temps je gâche avec d'autres contenus. Je vais énumérer ici quelques méthodes - certaines versions d'archives ont sûrement des drapeaux de merde tandis que d'autres plus spartiates, je suis plus intéressé par ces dernières.
Certaines façons de désarchiver, y en a-t-il d'autres?
$ find . -anewer fileThatExistedBeforeUnarchieving -ok rm '{}' \;
Les faiblesses sont qu'il répertorie les*.zip
répertoires, vous devez donc utiliser slow-ok
, slow avec de nombreuses*.zip
correspondances et, pour une raison quelconque, il ne semble pas correspondre à tout ce qui est extrait.S'il s'agit d'une petite quantité de fichiers extraits, un par un, lents, lourds et sujets aux erreurs.
Lorsque je veux m'assurer que le contenu de l'archive est bien un dossier, je le vérifie parfois avec
$ unzip -l *.bsd
, fonctionne au moins dans la version unzip obsd.
Si vous faites référence à certains outils d'archivage, veuillez les indiquer le cas échéant. Restez simple cependant - je suis plus intéressé par les FAÇONS dont vous le faites, plutôt que par un seul outil.
la source
mkdir; unzip
choses, donc je ne suis jamais trop paresseux pour le faire! svn.mikelward.com/svn/scripts/untarRéponses:
De nom
Vous pouvez générer la liste des fichiers dans l'archive et les supprimer, bien que cela soit fastidieusement fastidieux avec des archiveurs tels que décompresser ou 7z qui n'ont pas la possibilité de générer une liste simple de noms de fichiers. Même avec tar, cela suppose qu'il n'y a pas de nouvelle ligne dans les noms de fichiers.
Au lieu de supprimer les fichiers, vous pouvez les déplacer vers leur destination prévue.
Utilisation de FUSE
Au lieu de dépendre d'outils externes, vous pouvez (sur la plupart des unités) utiliser FUSE pour manipuler des archives à l'aide de commandes de système de fichiers ordinaires.
Vous pouvez utiliser Fuse-zip pour jeter un œil à un zip, l'extraire avec
cp
, lister son contenu avecfind
, etc.AVFS crée une vue de l'ensemble de votre hiérarchie de répertoires où toutes les archives ont un répertoire associé (même nom avec # inséré à la fin) qui semble contenir le contenu de l'archive.
Par date
En supposant qu'il n'y a pas eu d'autre activité dans la même hiérarchie que votre extraction, vous pouvez distinguer les fichiers extraits par leur heure de connexion récente . Si vous venez de créer ou de déplacer le fichier zip, vous pouvez l'utiliser comme coupure; sinon, utilisez
ls -lctr
pour déterminer une heure de coupure appropriée. Si vous voulez vous assurer de ne pas retirer les zips, il n'y a aucune raison de faire une approbation manuelle:find
est parfaitement capable de les exclure. Voici des exemples de commandes utilisant zsh oufind
; notez que les primaires-cmin
et-cnewer
ne sont pas en POSIX mais existent sur Linux (et d'autres systèmes avec GNU find), * BSD et OSX.Avec GNU find, FreeBSD et OSX, une autre façon de spécifier l'heure de coupure est de créer un fichier et de l'utiliser
touch
pour régler son mtime sur l'heure de coupure.Au lieu de supprimer les fichiers, vous pouvez les déplacer vers leur destination prévue. Voici un moyen avec GNU / * BSD / OSX find, en créant des répertoires dans la destination selon les besoins.
Équivalent Zsh (presque: celui-ci reproduit toute la hiérarchie des répertoires, pas seulement les répertoires qui contiendront les fichiers):
Attention, je n'ai pas testé la plupart des commandes de cette réponse. Examinez toujours la liste des fichiers avant de les supprimer (exécutez d'
echo
abord, puisrm
si c'est ok).la source
Je me sens stupide, de toute façon je me suis gratté la tête pour écrire ce script quand j'ai eu un problème similaire. J'ai utilisé
cpio
avec le-it
drapeau pour obtenir une liste de fichiers; vous pouvez utiliser des commandes équivalentes pour d'autres archiveurs. La partie délicate est que l'archive cpio provient d'un initrd et que j'ai extrait dans/
, de nombreux dossiers et fichiers ont le même nom que dans un système qui fonctionne. Heureusement, cpio n'a écrasé aucun de mes fichiers existants. J'utilise une vérification de l'heure pour m'assurer de ne rien supprimer qui existait avant la mauvaise commande.la source
Que diriez-vous d'alimenter la liste des fichiers en archive
xargs rm
?Ce serait
tar -tf tarbomb.tar | xargs rm
ouunzip --list zipbomb.zip | xargs rm
.la source
xargs
attend son entrée citée d'une manière particulière quifind
ne produit pas. Utilisezxargs -I rm {}
cette option pour que xargs traite plutôt un élément par ligne. Pour la commande unzip, quelle implémentation avez-vous? Le mien (Debian / Ubuntu) n'a pas--list
, seulement-l
, et il n'imprime pas seulement les noms de fichiers, de sorte qu'un traitement supplémentaire est nécessaire.find
. 3) vous avez raisonunzip
, je n'ai pas testé et il ne semble pas y avoir d'option pour une inscription non décorée. Non--list
sur mon Ubuntu également - je n'ai tout simplement pas testé.tar -t
parfind
. Mais mes autres points restent valables. Il existe un risque réel que votre commande telle qu'elle soit supprimée supprime un fichier non lié.tar -tf tarbomb.tar
imprimera les noms de fichiers un par ligne, vous pouvez donc fairetar -tf tarbomb.tar | while IFS=$'\n' read -r filename; do rm "$filename"; done
ou similaire.Pas vraiment ce que vous avez demandé, mais comment utiliser un script "décompresser tout" au lieu de.
De cette façon, la sortie de chaque fichier va dans son propre répertoire.
la source
J'utilise la fonction suivante dans zsh:
C'est-à-dire la substitution de commandes pour supprimer tous les fichiers dans la sortie nettoyée de
unzip -l
.tar tvf
pourrait être utilisé d'une manière similaire.la source