Question

On m'a envoyé un fichier zip contenant 40 fichiers avec le même nom. Je voulais extraire chacun de ces fichiers dans un dossier séparé ou d'extraire chaque fichier avec un nom différent (fichier1, fichier2, etc).

Est-il possible de le faire automatiquement avec des outils Linux standards? Un chèque de Décompressez homme n'a rien révélé qui pourrait me aider. zipsplit ne semble pas non plus pour permettre une séparation arbitraire de fichiers zip (je tentais de diviser le zip en 40 archives, contenant chacun un fichier).

En ce moment je suis (r) enaming mes fichiers individuellement. Ce n'est pas tant d'un problème avec une archive de fichiers 40, mais est évidemment infranchissable.

Quelqu'un a une belle façon, simple de faire cela? Plus curieux que toute autre chose.

Merci.

Était-ce utile?

La solution

En supposant qu'un tel outil existe actuellement, il devrait être assez facile d'écrire un en python. Python a un zipfile le module qui devrait être suffisant.

Quelque chose comme ça (peut-être, non testé):

#!/usr/bin/env python

import os
import sys
import zipfile

count = 0

z = zipfile.ZipFile(sys.argv[1],"r")

for info in z.infolist():
    directory = str(count)
    os.makedirs(directory)
    z.extract(info,directory)
    count += 1

z.close()

Autres conseils

Je sais que c'est un couple ans, mais les réponses ci-dessus n'a pas résolu mon problème particulier ici, donc je pensais que je devrais aller de l'avant et après une solution qui a fonctionné pour moi.

Sans script, vous pouvez simplement utiliser l'entrée de ligne de commande pour interagir avec les outils de dézipper interface texte. Autrement dit, lorsque vous tapez à la ligne de commande:

unzip file.zip

et il contient les fichiers du même nom, il vous demandera avec:

replace sameName.txt? [y]es, [n]o, [A]ll, [N]one, [r]ename:

Si vous voulez faire à la main, vous tapez « r », puis à l'invite suivante:

new name:

vous suffit de taper le nom du nouveau fichier.

Pour automatiser cela, il suffit de créer un fichier texte avec les réponses à ces invites et l'utiliser comme l'entrée décompressez, comme suit.

r
sameName_1.txt
r
sameName_2.txt
...

généré assez facilement en utilisant votre langage de script favori. Enregistrer comme unzip_input.txt puis l'utiliser comme entrée décompressez comme ceci:

unzip < unzip_input.txt

Pour moi, cela était moins d'un mal de tête que d'essayer d'obtenir les modules d'extraction Perl ou Python travaillant la façon dont je avais besoin. Espérons que cela aide quelqu'un ...

ici est une version de script linux

dans ce cas, le 834733991_T_ONTIME.csv est le nom du fichier qui est le même dans tous les fichiers zip et le .csv après « $ count » a simplement être échangé avec le type de fichier que vous voulez

#!/bin/bash

count=0

for a in *.zip
do
    unzip -q "$a"
    mv 834733991_T_ONTIME.csv "$count".csv
    count=$(($count+1))
done`
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top