SCP rekursive Dateiübertragungsreihenfolge

11

Ich frage mich, ob es möglich ist, beim Übertragen von Dateien mit eine Sortierreihenfolge anzugeben scp.

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

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

scpGibt es eine Möglichkeit, ssh auf der Quellenseite (Serverseite) so zu konfigurieren, dass Dateien beispielsweise in aufsteigender Reihenfolge des Dateinamens übertragen werden, da dies möglicherweise mit der Funktionsweise zusammenhängt?

Dmitry Minkovsky
quelle

Antworten:

4

Ich würde das Problem mit tarund die Pfeifentransparenz von lösen ssh. Ein Beispiel ist unten zu sehen, der Remote-PC heißt bar. Vor dem Test habe ich drei leere Dateien /tmp/foodurch Ausführen erstellt 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

Das -TFlag von tarbewirkt, dass Dateinamen gelesen werden, die aus dem nächsten Parameter gepackt werden sollen, und -bedeutet die Standardeingabe. Jetzt müssen Sie nur noch den Namen der Dateien einfügen, die von ls(wie im Beispiel) oder findfür schwierigere Aufgaben stammen können. Mit diesem Setup können Sie sortdie genaue Reihenfolge angeben, in der die Dateien über SSH übertragen werden (in diesem Fall -rsortierte Dateien in umgekehrter alphabetischer Reihenfolge). Das -vwird nur zum endgültigen Auspacken hinzugefügt tar, damit die Reihenfolge sichtbar ist.

dnet
quelle
Woah, großartiger Ansatz auf niedrigerer Ebene, der das Gesamtbild so klar darstellt. Vielen Dank.
Dmitry Minkovsky
Wie könnte ein solcher Ansatz erweitert werden, um Dateien einzeln anstatt in einem Archiv zu übertragen? Würde eine Schleife, die über die Ergebnisse sortdes barRemote-Befehls iteriert, dies irgendwie erreichen?
Dmitry Minkovsky
Es mag sein, aber ich sehe das Problem bei der Übertragung nicht als Archiv. Wenn Sie darüber nachdenken, gibt es keinen großen Unterschied zwischen diesem Ansatz und scp- beide senden Metadaten und Inhalte für jede Datei, sie verwenden nur ein anderes "Protokoll". Ich denke, Sie könnten die Ergebnisse durchlaufen, aber dann sollten Sie sich um Dateien kümmern, deren Namen Leerzeichen enthalten.
dnet
2
@ Dimadima, wenn dir die Antwort so gut gefällt, könntest du vielleicht die Antwort akzeptieren .
Peter V. Mørch
Diese Antwort funktioniert, aber man muss sie an den Fall anpassen, in dem Dateien Leerzeichen in Namen haben.
Ruslan
1

Eine Dateiübertragung in alphabetischer Reihenfolge kann erreicht werden mit rsync:

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

Permöglicht teilweises Herunterladen, elegt das SSH-Protokoll fest und rlädt rekursiv herunter.

Lenar Hoyt
quelle
0

Für den Fall, dass dies jemandem hilft, habe ich hier eine einfache Lösung bereitgestellt:

/programming/23067175

Ich warte immer noch auf einen klügeren Weg!

Victor Sojo
quelle
1
Dies ist nur ein Link. Geben Sie hier eine vollständige Antwort ein und geben Sie dann den Link als Referenz an.
Kevin Panko