リモートディレクトリのコレクションから選択的にコピーする

リモートディレクトリのコレクションから選択的にコピーする

次のような多数の番号付きディレクトリを持つリモート マシンがあります。

dir1 dir2 dir3 ... dir40

それぞれに番号付きのファイルがいくつか含まれています。

file1 file2 file3 ... file2530

各ディレクトリ内の選択した範囲のファイルのみをコピーしたい。各ディレクトリのファイル名は同じなので、ローカルマシンでディレクトリ階層を再作成したい。しかし、scp -rファイルでは、ディレクトリ内のすべてのファイルをコピーすることはできません。

リモート マシンで SSH キーを使用して自動接続を設定することはできないため、リモート コピー コマンドを繰り返し呼び出す必要がない方法をお勧めします。また、ファイルが大きいため、全体をコピーして不要なファイルを削除し、rmブレース拡張を行うのは避けたいと考えています。

ディレクトリ構造を維持しながら、ディレクトリ内のすべてのファイルをコピーせずに、リモート マシンから一連のファイルとそのファイルの親ディレクトリをコピーするにはどうすればよいですか?

答え1

を使用するrsyncと、リモートへの ssh を 1 回だけ実行し、ファイルの完全なリスト、またはコピーするファイルとコピーしないファイルの glob パターンのリストのいずれかを提供します。たとえば、

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

file-40.outこれにより、40 から 99 までの 2 文字と、file-33.out39 から 39 までの2 文字以上のファイル名が除外されますfile-100.out。示されているオプションを使用してコマンドを実行し-n、転送される名前のリストを収集します。問題がなければ、オプションを削除して実際にコピーを実行します。

は、 glob パターンで中rsync括弧をサポートしていないことに注意してください{}。コピーするファイルを指定する別の方法は、除外パターンがどの程度特殊であるかによって異なりますが、確実な方法は、-n除外パターンを使用せずに完全な名前のリストを取得し、このリストを編集してファイルのリストとして提供することです。リモートの宛先から を--files-from削除する必要もあります。dir*

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

関連情報