Ich muss alle .class-Dateien vom Server auf den lokalen kopieren, wobei alle Verzeichnisse reserviert sind. zB server:/usr/some/unknown/number/of/sub/folders/me.class
wird /usr/project/backup/some/unknown/number/of/sub/folders/me.class
das problem sein, es gibt viele andere nutzlose dateien wie .svn-base dateien, die ich nicht will. Wie kann ich sie filtern, damit ich nur scp
.class-Dateien habe?
98
Antworten:
Ich würde wahrscheinlich empfehlen, so etwas
rsync
zu verwenden, da esinclude
undexclude
Flaggen enthält, z. B.: -Einige andere nützliche Flags:
-r
für rekursiv-a
für das Archiv (meistens alle Dateien)-v
für ausführliche Ausgabe-e
ssh anstelle des Standardwerts angeben (der eigentlich ssh sein sollte)quelle
-a
bereits-r
gemäß den rsync-Manpages.--prune-empty-dirs
entfernt die leeren Verzeichnisse.So schließen Sie Punktdateien im Basisverzeichnis aus:
[!.]*
ist ein Shell-Glob, der auf alle Dateien im Arbeitsverzeichnis erweitert wird, die nicht mit einem Punkt beginnen.quelle
In scp gibt es keine Funktion zum Filtern von Dateien. Für "fortgeschrittene" Dinge wie diese empfehle ich die Verwendung von rsync:
(Diese Zeile kopiert rsync aus dem entfernten Ordner in den aktuellen)
Neuere Versionen von rsync tunnel standardmäßig automatisch über eine ssh-Verbindung.
quelle
Da Sie können
scp
, sollten Sie in Ordnung seinssh
,entweder das folgende Skript zu schreiben oder sich anzumelden und auszuführen ...
Zurück (Abmelden) zum lokalen Server und
scp
,Wenn Sie feststellen, dass das
$(find ...)
zu lang ist, um Ihren Teer zu ändern,Schließlich, da Sie es behalten
/usr/project/backup/
,warum die Extraktion stören? Behalten Sie einfach die
tar.bz2
, vielleicht mit einem Datum + Zeitstempel.quelle
rsync
undssh
auf dem Betriebssystem installiert. Stattdessen war dies eine clevere Problemumgehung. Vielen Dank!Unterer Befehl für Dateien.
scp `find. -maxdepth 1 -name "* .log" \! -name "hs_err_pid2801.log" -Typ f` root @ IP: / tmp / test /
Unterer Befehl für Verzeichnis.
scp -r `find. -maxdepth 1 -name "lo *" \! -name "localhost" -Typ d` root @ IP: / tmp / test /
Sie können den obigen Befehl gemäß Ihren Anforderungen anpassen.
quelle
Wenn die SSH-Schlüssel-basierte Authentifizierung aktiviert ist, funktioniert das folgende Skript.
quelle
Wenn Sie tatsächlich scp verwenden möchten, gibt es einen indirekten Weg. Sagen wir, wir möchten alle JPG-Dateien unter dem lokalen Ordner '/ src' in den Ordner '/ dst' auf dem Remote-Server 10.1.1.2 kopieren:
quelle
quelle
Kopieren Sie Ihren Quellordner in
somedir
:cp -r
srcdir
somedir
Entfernen Sie alle nicht benötigten Dateien:
finde somedir -name '.svn' -exec rm -rf {} \ +
starte scp von
somedir
quelle
tar
oderzip
-Datei packt. Stattdessen gibt es keine Komprimierung (scp führt die Komprimierung durch) und der 'gepackte' Code wird kopiert.