2016-04-02 2 views
0

Ich versuche, ein Bash-Skript zu schreiben, dass:Bash-Skript: Looping durch die Verzeichnisse über SSH und sie auf den lokalen Computer herunterzuladen

  • Loops durch alle Verzeichnisse in einem Ordner über einen SSH-Server
  • Downloads eine Datei (mit dem Titel say, "foo") in jedem dieser Ordner auf einem lokalen Computer.

Im Moment habe ich:

ssh [email protected] "for dir in ~/directoryname/*; (... something here!); done" 

ich ich scp glaube nicht verwenden können, während ich den SSH-Server bin Zugriff jedoch. Gibt es eine Möglichkeit, alles hier durchzuschlüsseln und herunterzuladen?

+1

Duplizieren in einem anderen Netzwerk: http://unix.stackexchange.com/questions/107122/downloading-files-o-s-ssh-based-on-a-list-of-filenames – andlrc

+0

FYI, StackSnippets sind nur für HTML und JavaScript. Verwenden Sie für die normale Codeformatierung die '{}' Taste. –

+0

Danke, @CharlesDuffy, ich schätze es. – 3PA

Antwort

2

scp remote funktioniert nur, wenn der Remote-Server Zugriff auf Ihr eigenes System hat. Nehmen wir an, dass es nicht so ist.

Sie es in zwei Schritten tun konnte:

ssh [email protected] "... some script that just echos the paths ..." > log 
for line in $(<log); do scp [email protected]:$line ./dir/$line; done 

oder Sie könnten rsync untersuchen, welche extrem leistungsfähig ist. es hat --include und --exclude Optionen, die Sie wie etwas zu tun erlauben würde:

rsync -av [email protected]:~/somepath/ ./somepath/ [--exclude/--include flags] 
+1

Ein anderes gebräuchliches Muster ist ein Tarball. 'ssh" $ server "'tar -C/source/Verzeichnisname.' | tar -C/dest/Verzeichnisname -x'. –

+0

BTW, 'für Zeile in $ (

+0

... verwandt: http://mywiki.wooledge.org/DontReadLinesWithFor –

0

Ja, das Skript ssh übergeben und ausgeführt wird auf dem Remote-Computer, das heißt, Sie können nicht einfach ein Argument verweisen Ihre eigene Maschine, um zu sagen, wohin die Dateien kopiert werden sollen.

Sie könnten ein Bash-Skript versuchen, das lokal ausgeführt wird, um die Verzeichnisstruktur abzurufen, die Sie suchen, und scp verwenden, um alle Dateien zu kopieren, die Sie abrufen möchten.

Oder, je nach Größe, scp über alle directoryname/, und bekommen, was Sie von dort wollen.