scp -r… aber ein bestimmtes Unterverzeichnis weglassen (ausschließen)

29

Hier ist die Verzeichnisstruktur:

/a/
/a/b/
/a/c/

Ich möchte alles kopieren, mit Ausnahme des Unterverzeichnisses / a / c /.

scp -rp myserver:/a .      # this will copy everything

F: Wie würde ich ein Verzeichnis angeben, das im Befehl scp weggelassen werden soll?

russian_spy
quelle
3
Die ursprüngliche Motivation ist, dass das Unterverzeichnis "/ a / c /" sehr groß ist (Gigabyte). Wenn Sie es also weglassen, wird die Kopie von Minuten auf Sekunden reduziert.
russian_spy

Antworten:

28

Ich glaube nicht, dass Sie können, aber Sie könnten Rsync verwenden? Etwas wie das:

rsync -a --exclude=a/c myserver:/a .
Paul Dixon
quelle
5

Ich denke, dies ist die richtige Methode, so dass Sie immer noch SSH verwenden. Ich habe keine Möglichkeit gefunden, dies mit scp zu tun - aber die Verwendung von rsync über ssh könnte das Problem beheben.

rsync -e 'ssh -ax' -av --exclude /a/c myserver:/a .

Wenn Sie die Option -n verwenden, wird ein Probelauf des Prozesses erstellt:

 rsync -e 'ssh -ax' -av --exclude /a/c -n myserver:/a .

quelle
Versuchen Sie auch -rz: -e "ssh -i private.pem" -rz 'users@server:/full/path/'.
mbrownnyc
1

Sie können erweitertes Globbing wie im folgenden Beispiel verwenden:

#Enable extglob
shopt -s extglob

cp -rv !(./excludeme/*.jpg) /var/destination
WackGet
quelle
0

Dies ist nicht die perfekte Methode, aber legen Sie das Unterverzeichnis fest, das Sie als schreibgeschützt ausschließen möchten. chmod -R 444 /a/csollte den Trick machen. Beim Versuch, über dieses Verzeichnis zu schreiben, wird die Fehlermeldung "Berechtigung verweigert" ausgegeben.

sjobe
quelle