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?
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?
Antworten:
Nein, kannst du nicht. Sie können jedoch anhalten scp
und rsync
stattdessen 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/
Nein, nicht mit -r
oder einer anderen Syntax, die mehrere Dateiübertragungen innerhalb eines scp
Befehls ausführt .
Dies scp
folgt 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.
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.