0

特定のパターンを含む最初の行まで、リモートマシンからローカルマシンにファイルをコピーしたいと思います。

シナリオ:管理者が確認するまで、ローカルのBashプロファイルをリモートのBashプロファイルの一部で更新します。

この簡単な「シェルスクリプト」ハックよりも良い方法はありますか(おそらくあると思います!)?

ssh tinosino@robottinosino-wifi cat /Users/tinosino/.profile | sed '/Verify this script further than this point/,$ d' > /home/tinosino/Desktop/tinosino_bash_profile.sh
  • リモートマシン:robottinosino-wifi(OSX)
  • センチネルライン:このスクリプトをこのポイントよりもさらに検証します

基本的なシェルスクリプトを使用できます。デフォルトであるBash、または最も一般的なdiff /source-controlbinを使用できます。

アイデアは、あなたが推測するように、最終的にこのプロセスを自動化することです。cron?これをどのように行うかについて何か考えはありますか?私のBashプロファイルの開始はサーバーから来るはずです、「残り」は私がカスタマイズするために自由です。

私の前の失敗した試み:

  • を使用してhead
  • プロセス置換を使用する<( ... )
  • を使用してgrep
  • ローカルの名前付きパイプを使用する(これは楽しかったです。名前付きパイプには、テキストを生成するプログラムが必要ですが、上記のcat-> sed行のようなものを実行します)

重要な注意:リモートシステムがファイル全体を調べないで、センチネル行を「認識」したらフィルターを切り捨てることが非常に望ましいです。パターンが1,000,000,000の行#300にある場合は、単に確認してください。 300行。

4

2 に答える 2

4

問題は、sedコマンドがファイル全体を読み取るように構成されていることです。

sed -n '/Verify this script/q; p'行が見つかったら、代わりに終了するために使用できます。

ssh tinosino@robottinosino-wifi cat /Users/tinosino/.profile | sed -n '/Verify this script/q; p' > /home/tinosino/Desktop/tinosino_bash_profile.sh

または、catを無駄に使用しない場合、この場合は大きな違いはありませんが、後で複数のセクションを削除する場合は、転送するデータが少なくなります。

ssh tinosino@robottinosino-wifi "sed -n '/Verify this script/q; p' /Users/tinosino/.profile" > /home/tinosino/Desktop/tinosino_bash_profile.sh
于 2013-03-12T17:40:41.920 に答える
2

リモートサーバーでフィルタリングを実行するだけです。

ssh tinosino@robottinosino-wifi sed -n 'p;/Verify.../q' /Users/tinosino/.profile \
  >>/home/tinosino/Desktop/tinosino_bash_profile.sh

-nflagとpandコマンドを一緒に使用qすると、「Verify ...」で始まる最初の行までの行のみが出力されますが、これは含まれません。

于 2013-03-12T17:41:07.020 に答える