特定のファイルのみを scp する

特定のファイルのみを scp する

変更されたファイルを SSH 経由で godaddy にコピーしようとしています。 godaddy はひどいので、当然 rsync は許可されません。 scp は使用できますが、変更されたファイルのみをコピーしたいのです。 これは不可能だと思いますので、すべての php ファイルのみを scp できるかどうか疑問に思っています。

ただし、サブディレクトリが多数あるため、 -r オプションを使用する必要があります。

scp を使用して、拡張子 を持つすべてのファイルを再帰的にコピーする方法はありますかphp? 次のようになります:

scp -r -name "*php" /local/html/ user@server:/home/html/ (動作しません)

望ましい結果

//ローカルマシン上
$ ./source を検索

ソース/1.php
ソース/2.php
ソース/サブ
ソース/sub/3.php
ソース/sub/4.php
ソース/サブ/DONT-コピー.txt
ソース/sub/DONT-コピー.png
ソース/サブ/サブ2
ソース/sub/sub2/5.php
ソース/sub/sub2/6.php

//ファイルをコピーするコマンド
$ [scpコマンドはこちら]

//リモートサーバー上
$ ./destination を検索

宛先/1.php
宛先/2.php
目的地/サブ
宛先/サブ/3.php
宛先/sub/4.php
宛先/サブ/サブ2
宛先/sub/sub2/5.php
宛先/sub/sub2/6.php

これは動作しません

//ローカルマシン上
$ ./source を検索

ソース/1.php
ソース/2.php
ソース/サブ
ソース/sub/3.php
ソース/sub/4.php
ソース/サブ/DONT-コピー.txt
ソース/sub/DONT-コピー.png
ソース/サブ/サブ2
ソース/sub/sub2/5.php
ソース/sub/sub2/6.php

//ファイルをコピーするコマンド
$ cd ソース; scp -r *.php ユーザー@リモート:/宛先

//リモートサーバー上
$ ./destination を検索

宛先/1.php
宛先/2.php

おそらくfindも使ってみることもできるだろうが、これはそのままでは動作しません:

./source -name "*.php" -exec scp {} user@remote:{} \; を検索します。

{}find では複数の演算子を使用できないと思われるため、これは機能しません。

また、たとえば find が返され/users/johndoe/documents/source/1.php、リモート サーバー上でパスを揃えたい場合など/home/jane/www/destination/1.php、リモート サーバー上でパスを揃えるのは難しい場合があります。

答え1

ホストがプッシュのみを許可し、rsync を許可しない場合は、次のようにします。

  • ターゲット構造に似た「シャドウ」ディレクトリをローカルマシン上に作成します。
  • rsyncこのシャドウディレクトリにプッシュし、出力をキャプチャするために使用します(--log-fileスクリプト化したい場合はあります)
  • 出力からrsync削除する必要があるファイルを決定するか、プッシュしてリストを作成します
  • おそらく(プッシュ方法によって異なります):変更が必要なファイルのみからパッケージを作成します
  • プッシュツール(ftp、scpなど)を起動し、リストのファイルに対して実行します。

答え2

できないんですかscp -r *.php destination

答え3

scp -r ユーザ@ip:/data/files/*.php /tmp/files/

関連情報