変更されたファイルを 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/