J'avais en fait besoin de quelque chose un peu plus complexe - extraire un fichier spécifique s'il existe. La difficulté étant que le flux de fichier d'entrée peut ne pas être un fichier zip, et dans ce cas, je devais le faire passer à travers le tuyau. Voici ma solution (merci principalement à la solution de Jason R. Coombs)
python -c "import zipfile,sys,StringIO
data=sys.stdin.read()
try:
z=zipfile.ZipFile(StringIO.StringIO(data))
z.open(\"$1\")
sys.stdout.write(z.read(\"$1\"))
except (RuntimeError, zipfile.BadZipfile):
sys.stdout.write(data)"
J'ai enregistré cela sous le nom de fichier "effpoptp" (pas un nom simple) dans le dossier "/bin" sur ma machine donc le tester est comme suit :
cat defaultModel.mwb|effpoptp "document.mwb.xml"
Le but est de versionner les fichiers MySQL Workbench, où le fichier peut être le fichier xml nommé comme le fichier workbench, ou le fichier workbench complet.
0 votes
Cela semblait réalisable, mais il semble que ce soit seulement possible d'extraire un fichier zip et de le transmettre à une autre commande si le zip contient un seul fichier. Je voulais extraire un fichier spécifique d'un zip multi-fichier. Au lieu de transmettre, j'ai opté pour l'enchaînement de plusieurs commandes 'unzip file.zip /chemin/fichier && dostuff /chemin/fichier && rm -rf /chemin'. Bien que cela ne réponde pas à la question initiale et implique la création de fichiers temporaires, cela a satisfait mon besoin.
0 votes
Vérifiez pigz. Nous l'utilisons dans un tuyau. andrew.tumblr.com/post/2316602611