2016-04-02 8 views
0

私はbashスクリプトを記述しようとしているもの:bashスクリプト:SSH上のディレクトリをループし、ローカルマシンにダウンロード

  • ループのすべてのディレクトリをフォルダ内のSSHサーバ経由
  • ダウンロードこれらの各フォルダの内部にあるファイル(「foo」というタイトルのファイル)をローカルマシンにコピーします。現時点で

は、私が持っている:

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

私はSSHサーバにアクセスしていながら、私はしかし、scpコマンドを使用できるとは思いません。ループしてここですべてをダウンロードできる方法はありますか?

+1

別のネットワークで複製:http://unix.stackexchange.com/questions/107122/downloading-files-over-ssh-based-on-a-list-of-filenames – andlrc

+0

FYI、StackSnippetsはHTMLのみです。 JavaScript。通常のコードフォーマットでは '{}'ボタンを使います。 –

+0

ありがとう、@CharlesDuffy、私はそれを感謝します。 – 3PA

答えて

2

scpを実行すると、リモートサーバーが自分のシステムにアクセスできる場合にのみリモートで動作します。そうではないと仮定しよう。

次の2つのステップでそれを行うことができます:

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

またはあなたは非常に強力であるrsyncを調査することができます。それはあなたのような何かをできるようになる--include--excludeのオプションがあります。

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

もう一つの一般的なパターンは、タールボールの配管です。 'ssh" $ server "'tar -C/source/directory-name。' | tar -C/dest/directory-name -x'となります。 –

+0

ところで、 'for line in $(

+0

...関連:http://mywiki.wooledge.org/DontReadLinesWithFor –

0

うん、そのスクリプトは、SSHに渡される引数で、かつ簡単にあなたを参照することはできませんを意味し、リモートマシン上で実行されますファイルのコピー先を教えてください。

検索するディレクトリ構造を取得するためにローカルで実行されるbashスクリプトを試してみることができます。また、scpを使用して、検索に関心のあるものをコピーできます。

または、サイズに応じて、directoryname/のすべてをscpして、そこから欲しいものを入手してください。

関連する問題