次のような大きな番号のディレクトリを持つリモートコンピュータがあります。
dir1 dir2 dir3 ... dir40
各ファイルには、番号付きの複数のファイルが含まれています。
file1 file2 file3 ... file2530
各ディレクトリで選択した範囲のファイルだけをコピーしたいと思います。ファイル名は各ディレクトリで同じなので、ローカルコンピュータでディレクトリ階層を再作成したいと思います。でもそうしたくないからすべてscp -r
ファイルを使用してディレクトリ内のすべてのファイルをコピーすることはできません。
リモートシステムでは、SSHキーを使用して自動接続を確立できないため、リモートコピーコマンドを繰り返し呼び出さないようにすることをお勧めします。ファイルも大きいので、ただファイル全体をコピーし、不要なファイルを削除し、rm
括弧拡張をしたくありません。
そのディレクトリ内のすべてのファイルをコピーせずにディレクトリ構造を維持しながら、リモートシステムからファイルセットとそのファイルの親ディレクトリをどのようにコピーできますか?
答え1
を使用すると、リモートでrsync
一度だけsshを実行し、コピーするファイルの完全なリストまたはファイルのglobパターンのリストを提供できます。例えば、
rsync -navR --exclude='*-[4-9]?.out' --exclude='*-3[3-9].out' --exclude='*-???*.out' myremote:'dir*' mylocaldir
file-40.out
40から99まで、file-33.out
39以上までの2文字などのファイル名は除外されますfile-100.out
。-n
送信する名前のリストを収集するには、表示されたオプションを指定してコマンドを実行します。可能であれば、実際にコピーを実行するオプションを削除します。
グローバルモードは中rsync
括弧をサポートしません。{}
コピーするファイルを指定するもう1つの方法は、除外パターンがどれほどクールかによって異なりますが、最も明白な方法は-n
除外なしパターンを使用してフルネームリストを取得し、それを編集して--files-from
ファイルリストとして提供することです。dir*
リモートターゲットからも以下を削除する必要があります。
rsync -av --files-from=list myremote: mylocaldir