De quoi ai-je besoin pour extraire et combiner des fichiers texte à partir de plusieurs fichiers ZIP, via une ligne de commande?

1

J'ai un défi de script intéressant devant moi. Je suis presque certain qu'il y a un moyen de le faire, mais je sens qu'il me manque probablement des outils particuliers et / ou des connaissances fonctionnelles.

Il existe une cinquantaine de fichiers ZIP contenant chacun, entre autres, des fichiers texte qui doivent être fusionnés. La structure ressemble à ceci:

C:\Reports\FirstJob-1.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt  

C:\Reports\FirstJob-2.zip  
|-MyName  
  |-FirstJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt 

C:\Reports\SecondJob-1.zip  
|-MyName  
  |-SecondJob
    |-1
      |-[Some other folders]
      |-TXTReports
        |-English
          |-[Some other files]
          |-Report.txt

Si j'avais tous les Report.txtfichiers dans un dossier normal et nommé de manière unique, je pourrais probablement simplement écrire une instruction FOR qui cible *.txtet exécute quelque chose de similaire type filename.txt >> Consolidated.txtsur chacun. Cependant, tous portent le même nom de fichier et sont incorporés profondément dans des fichiers ZIP distincts.

Les outils potentiellement utiles dont je dispose actuellement sont Windows XP Professional SP3, PowerShell et WinZip. Je préférerais ne rien télécharger ni installer, mais je comprends que des outils tiers (ou des outils supplémentaires de Microsoft ou WinZip) peuvent être nécessaires. Quels que soient les outils que j'utilise doivent fonctionner en mode natif sous Windows. Je ne veux vraiment pas avoir à jouer avec Cygwin ou d'autres émulateurs sur ce système.

À tout le moins, j'ai besoin d'un outil qui me permettra d'analyser et de manipuler les fichiers ZIP à partir de la ligne de commande. De plus, y a-t-il d'autres complications particulières à cela auxquelles je n'ai pas encore pensé?

Iszi
la source

Réponses:

1

Le fichier UnZip d’Info-ZIP (les fichiers binaires Windows ici ) vous permettra d’extraire des fichiers zip à partir de la ligne de commande unzip -x. Le reste consiste à rechercher et à concaténer les fichiers, par exemple:

find . -name Report.txt -print0 | xargs -0 cat > Consolidated.txt

Les commandes ci-dessus sont des commandes Unix que vous pouvez trouver dans Cygwin ou GnuWin32 .

Les implications potentielles sont que si vous avez beaucoup de fichiers, la commande xargs prend trop de temps et si les fichiers sont très volumineux, vous risquez de manquer d'espace disque (vous pouvez résoudre ce problème en décompressant et en concaténant les fichiers, en supprimant l'archive non compressée. dossier après chaque fichier).

Ingmar Hupp
la source
Merci pour la suggestion. Je devrais probablement mentionner que je préférerais ne pas jouer avec Cygwin ou d’autres émulateurs Unix. Je veux tout faire nativement dans Windows.
Iszi
1

Puis-je suggérer une autre option? Si vous utilisez Windows XP, vous disposez également de VBScript. Il y a plusieurs années, j'ai écrit une série d'articles qui montraient comment VBScript dans WSH pouvait être utilisé pour créer et manipuler des fichiers zip à l'aide du support intégré de Windows XP pour Compressed Folders. Vous devriez essayer. Votre script ne comporterait aucune dépendance vis-à-vis de tiers et la génération de scripts pour la logique du système de fichiers est relativement simple.

Dossiers compressés dans WSH

Comprendre la classe CompressedFolder

Implémentation de la classe CompressedFolder

En résumé, les fichiers zip peuvent être ouverts en tant que dossiers compressés à l'aide de la méthode Namespace de l'objet Shell. Cela revient essentiellement à les explorer comme un répertoire avec l’Explorateur Windows.

Nilpo
la source
Merci pour la suggestion. Je ne connaissais pas très bien VBScript. J'espérais donc disposer d'un utilitaire de ligne de commande qui me permettrait de placer toutes les commandes nécessaires dans un fichier de commandes. Pourtant, je peux tenter le coup.
Iszi
Les fichiers batch sont extrêmement limités dans leur capacité à implémenter la logique. C'est vraiment votre meilleur itinéraire. Je suggère certainement d'y jeter un coup d'oeil.
Nilpo