Adaptation française : Deny
Relecture de la version française :
Copyright © 2008 Silas S. Brown
Copyright © 2008 Deny
Copyright © 2008
Article paru dans le n°155 de la Gazette Linux d'octobre 2008.
Article publié sous Open Publication License. La Linux Gazette n'est ni produite, ni sponsorisée, ni avalisée par notre hébergeur principal, SSC, Inc.
Un rapide script CGI pour télécharger tout un répertoire en tant que fichier zip
Si vous avez une grande collection de fichiers et que vous les placez dans votre serveur web sans aucun index, il est probable que le serveur va générer ses propres index HTML pour vous. Tout cela est très bien, mais j'ai eu récemment la pénible expérience de télécharger 46 petits fichiers distincts à partir de mon serveur web, en utilisant une machine sous Windows© d'autrui avec Internet Explorer et un gestionnaire de téléchargement générant 3 fenêtres de dialogue par clic dans une langue étrangère. Ne serait-il pas merveilleux de pouvoir indiquer au serveur de tous les zipper et de m'envoyer le fichier zippé .
Vous pouvez faire ceci parce que l'utilitaire zip sous Unix
(il s'agit du paquetage zip dans la plupart des distributions) est capable d'écrire dans la sortie standard. Au minimum, vous pouvez écrire un script CGI comme ceci :
#
! / bin / bash
echo Content-Type: application/zip echo Content-Type: application / zip
echo "Content-Disposition: attachment; filename=files.zip" echo "Content-Disposition: attachment; filename = files.zip"
echo
zip -9r - * zip-9R - *
Cela zippe le contenu du répertoire courant, en envoyant le résultat vers la sortie standard (C'est le rôle du tiret —) et cela indique au navigateur qu'il s'agit d'un fichier zip nommé files.zip
Mais on peut aller plus loin—le script suivant listera le contenu du répertoire, avec en option un lien « télécharger en tant que zip » qui définit le nom du fichier de manière appropriée. Si vous utilisez le petit serveur web Mathopd, vous pouvez éditer /etc/mathopd.conf
et définir AutoIndexCommand
vers le chemin d'accès de ce script :
export Filename="$(pwd|sed -e 's,.*/,,').zip" if test "$QUERY_STRING" == zip; then echo Content-type: application/zip echo "Content-Disposition: attachment; filename=$Filename" echo zip -9r - * else echo "Content-type: text/html; charset=utf-8" echo echo "<HTML><BODY><A HREF=\"..\">Parent directory</A> |" echo "<A HREF=\"./?zip\">Download $Filename</A>" echo "<h2>Contents of $Filename</h2><UL>" for N in *; do echo "<LI><A HREF=\"$N\">$N</A> ($(du -h "$N"|cut -f1))</LI>" done echo "</UL></BODY></HTML>" fi
Cela suppose que les noms de fichier qui ne sont pas en ASCII seront listés en UTF-8 (autrement, changez le jeu de caractères).
L'adaptation française de ce document a été réalisée dans le cadre du Projet de traduction de la Gazette Linux.
Vous pourrez lire d'autres articles traduits et en apprendre plus sur ce projet en visitant notre site : http://wiki.traduc.org/Gazette_Linux.
Si vous souhaitez apporter votre contribution, n'hésitez pas à nous rejoindre, nous serons heureux de vous accueillir.