この解決策は非常に厄介で、scp が複数回呼び出されるため、おそらく効率的ではありません。
ssh me@server 'find /data/stuff -name needthis.txt' 2>/dev/null | \
while read src; do
dest=.${src#/data/stuff}
echo mkdir -p $(dirname $dest)
echo scp "me@server:$src" "$dest"
done
説明
- 最初の行: サーバーにリモート ログインし、関心のあるすべてのファイルを見つけます。この
2>/dev/null
フレーズは、ssh コマンドによって発生した余分な出力を破棄します。最初の行の結果は、ファイル名のリストであり、完全なパスがあり、1 行に 1 ファイルです。
- 2 行目:
while
ステートメントは、これらの各ファイルを変数に読み込みますsrc
- 3 行目: 破棄
/data/stuff
して単一のドット (現在のディレクトリ) に置き換えることにより、宛先ファイルを作成します。
- 4 行目と 5 行目: ソースと一致するディレクトリ構造をローカル マシン上に作成し、コピーします。ただし、echo コマンドは実際の実行を妨げます。代わりに、コマンド自体が表示されます。
次に、このかなり長いコマンドを実行して、出力を調べます。満足したら、2 つecho
を削除して再度実行します。今回は実行が実際に行われます。私はこの解決策が長くて厄介であることを知っているので、専門家からの意見に感謝します。