web-dev-qa-db-fra.com

Obtenir le chemin du fichier sur ssh

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?

1
luv.preet

arbre

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.


trouver

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.


2
Robert Riedl