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?
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.
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:
sort
labar
commande à distance accomplirait cela en quelque sorte?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.On peut réaliser le transfert de fichiers par ordre alphabétique en utilisant
rsync
:P
permet le téléchargement partiel,e
définit le protocole SSH etr
télécharge récursivement.la source
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!
la source