Ordre de transfert de fichier récursif SCP

11

Vous vous demandez s'il est possible de spécifier un ordre de tri lors du transfert de fichiers avec scp.

Par exemple: $ scp -r "user@host:/path/to/download/" .

[... files download in a seemingly random order ...]

Étant donné que cela peut être lié au scpfonctionnement, existe-t-il un moyen de configurer ssh côté source (serveur) afin que les fichiers soient transférés, par exemple, dans l'ordre croissant des noms de fichiers?

Dmitry Minkovsky
la source

Réponses:

4

Je devrais résoudre le problème taret la transparence des tuyaux ssh. Un exemple peut être vu ci-dessous, le PC distant est nommé bar. Avant le test, j'ai créé trois fichiers vides en /tmp/fooexécutant ssh bar 'mkdir /tmp/foo ; touch /tmp/foo/{a,b,c}'.

$ ssh bar 'cd /tmp/foo ; ls | sort -r | tar -cT -' | tar -xv
c
b
a
$ ls -l a b c
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 a
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 b
-rw-r--r-- 1 dnet dnet 0 nov   29 17:07 c

Le -Tdrapeau de tarfait lire les noms de fichiers à emballer à partir du paramètre suivant et -signifie l'entrée standard. Il ne vous reste plus qu'à y rediriger le nom des fichiers, qui peuvent provenir ls(comme dans l'exemple) ou findpour des tâches plus délicates. Avec cette configuration, vous pouvez utiliser sortpour indiquer l'ordre exact dans lequel les fichiers seront transmis via SSH (dans ce cas, les -rfichiers triés dans l'ordre alphabétique inverse). Le -vn'est ajouté qu'au final, déballage tar, pour que la commande soit visible.

dnet
la source
Woah, une excellente approche de niveau inférieur et présentant l'image plus large si clairement. Je vous remercie.
Dmitry Minkovsky
Comment une telle approche pourrait-elle être étendue pour transférer des fichiers individuellement plutôt que dans une archive? Est-ce qu'une boucle itérant sur les résultats de sortla barcommande à distance accomplirait cela en quelque sorte?
Dmitry Minkovsky
C'est possible, mais je ne vois pas le problème avec le transfert comme une archive. Si vous y réfléchissez, il n'y a pas beaucoup de différence entre cette approche et scp- les deux envoient des métadonnées et du contenu pour chaque fichier, ils utilisent simplement un "protocole" différent. Je suppose que vous pouvez parcourir les résultats, mais vous devriez alors vous occuper des fichiers avec des espaces dans leurs noms.
dnet
2
@dimadima, si vous aimez tellement la réponse, vous pourriez peut-être accepter la réponse .
Peter V. Mørch
Cette réponse fonctionne, mais il faut l'adapter au cas où les fichiers ont des espaces dans les noms.
Ruslan
1

On peut réaliser le transfert de fichiers par ordre alphabétique en utilisant rsync:

rsync -P -e ssh -r user@remote_host:/some_path local_path

Ppermet le téléchargement partiel, edéfinit le protocole SSH et rtélécharge récursivement.

Lenar Hoyt
la source
0

Dans le cas où cela aiderait quelqu'un, j'ai fourni une solution simple ici:

/programming/23067175

J'attends toujours une façon plus intelligente de le faire!

Victor Sojo
la source
1
Ce n'est qu'un lien. Pour une réponse complète, indiquez la réponse ici, puis indiquez le lien de référence.
Kevin Panko