Je développe une API dans laquelle j'ai besoin des chemins de plusieurs fichiers d'un serveur distant. Le nombre de fichiers varie entre 100 et 500. Les fichiers se trouvent dans des dossiers différents.
Donc, je boucle en boucle encore et encore, comme 10 à 50 fois (en fonction du nombre de fichiers), puis j'obtiens des chemins utilisant ssh dans mon python api.
Mais je veux une solution optimisée pour ce problème. À l’heure actuelle, j’établis une connexion SSH autant de fois que la boucle s’allonge, ce qui est lent et n’est pas la meilleure chose à faire.
Je pensais copier quotidiennement le /var/lib/mlocate/mlocate.db
du serveur distant sur mon ordinateur local, puis trouver le chemin à l'aide de la commande locate
à l'aide de cette base, si cela est possible. OR C'est comme si vous stockiez l'index de répertoire distant dans mon ordinateur local sur lequel je peux interroger plus rapidement.
Quels sont les autres meilleurs moyens d'y parvenir?
Il semble que tree
est très rapide pour produire une liste de tous les chemins de fichiers. Avec SSH, et dans le contexte de votre script, une commande pourrait ressembler à ceci
ssh user@Host "tree -if --noreport /your/base/directory" > /tmp/tree.output
- i pour avoir cette sortie semblable à un lot au lieu de l'arborescence graphique soignée
- f pour afficher le préfixe de chemin complet pour chaque ligne
- noreport pour couper les dernières lignes puisque tree
ajoute une ligne vide et un résumé des fichiers/répertoires trouvés
La sortie ressemblerait à ceci
/var
/var/backups
/var/backups/alternatives.tar.0
/var/backups/alternatives.tar.1.gz
/var/backups/apt.extended_states.0
/var/backups/apt.extended_states.1.gz
/var/backups/apt.extended_states.2.gz
/var/backups/aptitude.pkgstates.0
/var/backups/dpkg.Arch.0
/var/backups/dpkg.Arch.1.gz
Vous voudrez peut-être jeter un oeil à la page de manuel ici , pour voir quelques options sur la façon dont les liens symboliques sont affichés avec -l
, etc.
find
pourrait également être utilisé dans le même but
ssh user@Host "find /your/base/directory" > /tmp/find.output
là encore, vous voudrez peut-être vérifier comment vous gérez les liens symboliques i n la page de manuel .
Avec find
, vous pouvez également granuler en fonction des types de fichiers, des modèles, de la profondeur, etc.