La commande FTP LIST affiche une liste de tous les fichiers et répertoires du répertoire de travail en cours. Le problème est, il renvoie plusieurs formats différents en fonction du serveur. Quelqu'un sait-il d'une bibliothèque .NET qui est capable d'analyser les formats les plus populaires? Je suis d'accord avec une approche "essayez cette regex, si elle échoue, essayez la prochaine regex".Réponse à l'analyse de la commande FTP LIST (variations de syntaxe)
Répondre
Voici un RegEx que j'ai utilisé pour un projet. Semble fonctionner pour les serveurs FTP Windows et Unix. Quelqu'un pourrait être en mesure de le nettoyer, mais je le construis en concaténant un tas de propriétés sur une classe. Donc ce n'est pas aussi brutal à maintenir pour moi.
^((?<DIR>([dD]{1}))|)(?<ATTRIBS>(.*))\s(?<SIZE>([0-9]{1,}))\s(?<DATE>((?<MONTHDAY>((?<MONTH>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s(?<DAY>([0-9\s]{2}))))\s(\s(?<YEAR>([0-9]{4}))|(?<TIME>([0-9]{2}\:[0-9]{2})))))\s(?<NAME>([A-Za-z0-9\-\._\s]{1,}))$
est ici celui que je l'ai utilisé pour un serveur FileZilla:
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\w+)\s+(?<group>\w+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$
http://chrishaas.wordpress.com/2009/06/10/regex-for-parsing-ftp-list-command/
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\w+)\s+(?<group>\w+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$
version modifiée Chris Haas un tout petit peu de bits. Changé de sorte que le groupe de jours puisse également être constitué d'un seul nombre. \ d {2} -> \ d {1,2}
Merci pour la version originale.
Merci pour la mise à jour! J'ai mis à jour la réponse de Chris pour inclure ce changement. –
^(?<dir>[\-ld])(?<permission>([\-r][\-w][\-xs]){3})\s+(?<filecode>\d+)\s+(?<owner>\S+)\s+(?<group>\S+)\s+(?<size>\d+)\s+(?<timestamp>((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<hour>\d{1,2}):(?<minute>\d{2}))|((?<month>\w{3})\s+(?<day>\d{1,2})\s+(?<year>\d{4})))\s+(?<name>.+)$
Sur le site, le propriétaire est affiché au format Adresse de messagerie. J'ai changé le propriétaire et le groupe pour qu'ils soient des caractères non-espace au lieu des caractères de mot.
Ceci est en expansion sur la version Yodiz de la version de Chris Haas. Merci beaucoup!
- 1. Codes de réponse FTP
- 2. cURL- comment obtenir une réponse via la ligne de commande?
- 3. Syntaxe de la syntaxe Bash - signification de "- @"
- 4. Comment faire pour convertir la syntaxe de la requête à la syntaxe de la méthode
- 5. Aide avec la syntaxe ETD: la commande `s
- 6. Nom de la syntaxe SQL Syntaxe?
- 7. Outlook Mailing List Gestion de la diffusion
- 8. Quelle est la syntaxe de la ligne de commande pour supprimer des fichiers dans Perforce?
- 9. La réponse du client est différente de la réponse IE
- 10. Syntaxe d'exécution de commande portable implémentée en Python
- 11. FTP passif au lieu de FTP actif
- 12. Passer IEnumerable List à javascript
- 13. Collecte de données à partir de la réponse SOAP NDFD
- 14. Stream FTP téléchargement à la sortie
- 15. Erreur de syntaxe sur la déclaration ArrayList
- 16. Décomposition de la réponse HTTP
- 17. Oracle à la syntaxe MySQL
- 18. Transfert de fichiers via FTP
- 19. Historique de la syntaxe Nullable VB.NET
- 20. Impossible de faire fonctionner list()
- 21. Vérification de la syntaxe PHP?
- 22. Syntaxe LINQ par rapport à la syntaxe SQL
- 23. Problème de connexion Ftp
- 24. Le code de téléchargement FTP qui renvoie une réponse d'erreur du serveur
- 25. Script de distribution FTP
- 26. Client FTP scriptable
- 27. GroupBy avec la syntaxe de la méthode linq (pas la syntaxe de la requête)
- 28. Corriger la façon de terminer la réponse
- 29. C# FTP avec CD désactivé
- 30. Syntaxe de coloration à l'aide de Swing
Merci beaucoup! –
Notez que sur le serveur que j'utilise, le jour peut être 1 ou 2 chiffres, donc j'ai dû changer '(? \ d {2})' '(? \ d {1,2})' –
Cela semble être une excellente réponse pour moi. L'Op devrait marquer ceci comme la réponse si c'était ce qu'il a utilisé pour surmonter son problème, ou fournir sa propre réponse. –