Selektives Kopieren aus einer Sammlung von Remote-Verzeichnissen

Selektives Kopieren aus einer Sammlung von Remote-Verzeichnissen

Ich habe einen Remote-Computer mit einer großen Anzahl nummerierter Verzeichnisse, etwa so:

dir1 dir2 dir3 ... dir40

von denen jede mehrere nummerierte Dateien enthält:

file1 file2 file3 ... file2530

Ich möchte nur einen ausgewählten Bereich der Dateien in jedem Verzeichnis kopieren. Da die Dateinamen in jedem Verzeichnis identisch sind, möchte ich die Verzeichnishierarchie auf meinem lokalen Computer neu erstellen. Aber da ich nicht möchtejedenDatei kann ich nicht einfach scp -rjede Datei im Verzeichnis kopieren.

Ich kann keine automatisierte Verbindung mit SSH-Schlüsseln auf dem Remote-Rechner einrichten, daher würde ich eine Methode bevorzugen, die keine wiederholten Aufrufe eines Remote-Kopierbefehls erfordert. Die Dateien sind außerdem groß, daher möchte ich nicht einfach alles kopieren und die Dateien, die ich nicht haben möchte, mit rmKlammern löschen.

Wie kann ich eine Reihe von Dateien zusammen mit den übergeordneten Verzeichnissen dieser Dateien von einem Remotecomputer kopieren und dabei die Verzeichnisstruktur beibehalten, ohne alle Dateien in diesen Verzeichnissen zu kopieren?

Antwort1

Sie könnten verwenden rsync, das nur eine SSH-Verbindung zum Remote-Remote herstellt und ihm entweder eine vollständige Liste der Dateien oder eine Liste von Glob-Mustern der zu kopierenden oder nicht zu kopierenden Dateien bereitstellt. Beispiel:

rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir

Dies würde Dateinamen file-40.outmit 2 Zeichen von 40 bis 99 und auch file-33.outbis 39 und auch file-100.outoder größer ausschließen. Führen Sie den Befehl mit der -nangezeigten Option aus, um die Liste der Namen zu sammeln, die übertragen werden würden, und entfernen Sie, wenn dies in Ordnung ist, die Option, um das Kopieren tatsächlich durchzuführen.

Beachten Sie, rsyncdass Klammern in den Glob-Mustern nicht unterstützt werden {}. Alternative Möglichkeiten zum Angeben der zu kopierenden Dateien hängen davon ab, wie exotisch Ihr Ausschlussmuster ist. Eine narrensichere Methode besteht jedoch darin, -nund keine Ausschlussmuster zu verwenden, um die vollständige Liste der Namen zu erhalten. Bearbeiten Sie dann diese Liste und geben Sie sie als Dateiliste an. Sie müssen außerdem Folgendes vom Remote-Ziel --files-fromentfernen :dir*

rsync -av --files-from=list  myremote: mylocaldir

verwandte Informationen