Comment spécifier des noms de fichiers dans un zip lors de la création sur la ligne de commande à partir d'un tuyau?
Je suis en train de créer un fichier zip à partir d'un fichier contenu qui sont les canalisations, par exemple
mysql [params and query] | zip -q output.zip -
Cet écrit le zip correctement, mais lorsque vous ouvrez le zip, le fichier à l'intérieur d'elle est appelée "-". Est-il possible de spécifier ce que le nom de fichier de l'transmis dans les données doivent être dans le zip?
- S'il vous plaît ne pas étiqueter des questions comme "est-à-super-utilisateur" (ou appartient à quelque chose d'autre) - il suffit de voter pour les déplacer.
- Tout à fait d'accord avec vous!
Vous devez vous connecter pour publier un commentaire.
De ce que je peux rassembler vous ne pouvez pas faire les deux avec la
zip
commande, je veux dire que vous ne pouvez pas les deux préciser les noms de fichiers et de canaliser le contenu. Vous pouvez pipe le contenu et le fichier résultant est-
ou vous pouvez transférer les noms de fichiers avec-@
.Cela ne signifie pas qu'il est impossible d'utiliser d'autres techniques. J'ai aperçu un de ces ci-dessous. Cela signifie que vous devez avoir de PHP installée et l'extension zip chargé.
Il pourrait y avoir tout un tas d'autres façons de le faire. Mais c'est le plus simple que je connaisse. Oh, et c'est un one-liner trop.
C'est un exemple de travail à l'aide de PHP
Fonctionne sur windows, il vous suffit de changer les guillemets simples et doubles. Ou il suffit de placer le script dans un fichier.
"test.zip" le résultat de fichier Zip, "testfile" est le nom que le contenu qui sont transmis à la commande.
Résultat de
unzip -l test.zip
Et voici un exemple de travail à l'aide de python
Résultat de
unzip -l
Résultat de
unzip -p
Vous pouvez le faire.
ceci est fait à partir de la notion que j'ai 3 fichiers dans le dossier.
et le fichier lui-même, le résultat est ensuite
Linux Zip Homme page
Vous pouvez utiliser un tube nommé, et d'envoyer le résultat de la demande, tandis que la compression d'elle.
& zip
génère un fichier incomplet; il semble que zip s'exécute pendant que toutes les données ont été déversés dans le canal nommé encore. Si j'utilise; zip
alors c'est tout bon.; zip
c'est qu'il va attendre lemysql
commande pour être terminé avant de commencer à lire à partir d'un tube nommé. Des canaux nommés n'ont pas une capacité infinie. Cependant, si le contenu n'est pas très grand, il devrait y avoir aucun problème.Je ne pouvais pas gérer avec le PHP réponse (de mémoire sur la plus grande base de données mysql), et que le FIFO ne fonctionnait pas comme je voulais, donc ma solution est de renommer le fichier à l'intérieur de l'archive ZIP après l'exécution de la décharge, à l'aide de zipnote (qui est inclus dans le package zip sur Debian).
Python 3.5 ajout du support pour l'écriture de unseekable ruisseaux.
C'est pas joli, mais fonctionne.
Vous pouvez essayer: