6
votes

Liste de répertoires FTP récursive dans Shell / Bash avec une seule session (en utilisant CURL ou FTP)

J'écris un petit shellscript qui doit passer par tous les dossiers et fichiers sur un serveur FTP (récursivement). Jusqu'à présent, tout fonctionne bien en utilisant Curl - mais c'est assez lent, Becuase Curl commence une nouvelle session pour chaque commandement. Donc, pour 500 répertoires, Curl préformes 500 connexions.

Est-ce que quelqu'un sait, que je puisse rester connecté à l'aide de CURL (ce serait ma solution préférée) ou comment je peux utiliser FTP avec une seule session dans un script shell?

Je sais comment exécuter un ensemble de commandes FTP et récupérer la réponse, mais pour la liste récursive, elle doit être un peu plus dynamique ...

Merci pour votre aide!


0 commentaires

5 Réponses :


-1
votes

Si vous souhaitez simplement créer une liste de tous les fichiers et dossiers, vous pouvez utiliser ssh à la place. Quelque chose comme ça (mais vérifiez la documentation sur l'utilisation correcte) xxx


1 commentaires

Cela ne répond pas vraiment à la question. Nous ne savons pas qu'il a accès à Shell. Cela devrait être un commentaire.



0
votes

Vous pouvez vous connecter au serveur FTP de manière à accepter les commandes de Stdin et écrit à STDOUT. Créez deux pipes nommées ("FIFOS", Man MKFIFO ), Rediriger STDIN et STDOUT de la commande FTP à l'une d'elles. Ensuite, vous pouvez écrire des commandes sur STDIN-Connected-FIFO et les lire (ligne-by-ligne avec Bash's Lire par exemple) à partir du stdout-fifo. Ensuite, utilisez les résultats pour voir où vous devez envoyer une autre commande d'annonce (et l'imprimer ou ce que vous voulez faire)

En bref: pas quelque chose de script Bash convient à :) (jusqu'à ce que vous trouviez un outil qui fait ce que vous voulez seul bien sûr)


0 commentaires

10
votes

La commande est en réalité ncftpls -r . Il va répertorier récursivement tous les fichiers d'un dossier FTP.


1 commentaires

Ont constaté que certains serveurs FTP ne supportent pas cette méthode.



4
votes

Si c'est possible, essayez Usign LFTP Script: xxx pré>

prochaine chose suivante u besoin est BASH Script pour exécuter cette commande LFTP et l'écrire à fichier: p>

#!/bin/bash
lftp -f myscript.lftp > myOutputFile


1 commentaires

La solution lftp fonctionne réellement avec Windows FTP Server, même avec la prise en charge de ls -r supprimé: support.microsoft.com/kb/2007929 . Merci !



6
votes

juste pour résumer ce que les autres ont dit jusqu'à présent. Si vous essayez d'écrire un script shell portable qui fonctionne comme un fichier de commandes, vous devez utiliser la solution LFTP depuis Certains serveur FTP ne peuvent pas mettre en œuvre ls -r code>. Il suffit de remplacer 123.456.789.100 avec l'adresse IP réelle du serveur FTP dans les exemples suivants:

$ echo ls -lR | ftp 123.456.789.100 > listing.txt


0 commentaires