
次のような多数の番号付きディレクトリを持つリモート マシンがあります。
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.out
39 から 39 までの2 文字以上のファイル名が除外されますfile-100.out
。示されているオプションを使用してコマンドを実行し-n
、転送される名前のリストを収集します。問題がなければ、オプションを削除して実際にコピーを実行します。
は、 glob パターンで中rsync
括弧をサポートしていないことに注意してください{}
。コピーするファイルを指定する別の方法は、除外パターンがどの程度特殊であるかによって異なりますが、確実な方法は、-n
除外パターンを使用せずに完全な名前のリストを取得し、このリストを編集してファイルのリストとして提供することです。リモートの宛先から を--files-from
削除する必要もあります。dir*
rsync -av --files-from=list myremote: mylocaldir