scp - überspringt eine Datei während der Ausführung

8

Ich führe scp aus und kopiere einen Ordner vom Remote-Server. Ich arbeite mit -rl. Ich sehe also, dass die Dateien kopiert werden. Ist es möglich, die aktuelle Datei auf irgendeine Weise zu überspringen?

Chen Kinnrot
quelle

Antworten:

11

Nein, kannst du nicht. Sie können jedoch anhalten scpund rsyncstattdessen verwenden. Es werden nur die Unterschiede kopiert, die von der Teilkopie übrig geblieben sind, und Sie können alle Dateien oder Verzeichnisse ausschließen, die Sie nicht übertragen möchten.

rsync -avP -e ssh --exclude=somefile --exclude=somedir ./localdir/ user@server:remotedir/
forcefsck
quelle
2
Das ist zwar nützlich, beantwortet aber leider nicht die gestellte Frage.
Emmaly Wilson
8
Es beantwortet die Frage perfekt; Die Frage fragt, ob es möglich ist, etwas zu tun, und diese Antwort antwortet mit "Nein". Es bietet dann eine hilfreiche, themenbezogene Alternative.
Christopher Shroba
1

Nein, nicht mit -roder einer anderen Syntax, die mehrere Dateiübertragungen innerhalb eines scpBefehls ausführt .

Dies scpfolgt jedoch auch dem UNIX-Paradigma: Schreiben Sie Programme, die einfache, präzise Funktionen bieten, die auf interessante Weise miteinander verkettet werden können. Dies bedeutet, dass es möglich wäre, eine Schleife zu schreiben, die interaktiv einzelne Aufrufe des Befehls ausführt , einen pro Datei. Sie können dann aus den einzelnen Befehlen ausbrechen, während sie ausgeführt werden. (Strg-C)

Der Code hierfür wird dem Leser als Übung überlassen, aber die Notwendigkeit, dass diese Schleife innerhalb einer interaktiven Shell ausgeführt wird, muss betont werden. Das Ausbrechen einer nicht interaktiven Shell würde den gesamten Job beenden.

Andrew B.
quelle
0

Ja, du kannst!

Lassen Sie uns das Remote-Verzeichnis auflisten und jede Datei separat kopieren. Drücken Sie dann für jede Datei, die Sie nicht kopieren möchten, Strg-C:

OLD_IFS="$IFS"
IFS=$'\n'
for file in `ssh user@host ls /remote/directory/`
  do echo user@host:/remote/directory/$file /local/directory/
done;
IFS="$OLD_IFS"

OLD_IFS ist hier, um Dateien mit Leerzeichen zu behandeln.

Sylvain
quelle
Wo legst du das hin? Wie nennst du das?
StatsSorceress