web-dev-qa-db-ja.com

rsyncが.htaccessファイルを同期しない

Server1のディレクトリAとserver2のディレクトリBをrsyncしようとしています。

Server1のディレクトリAに座って、次のコマンドを実行しました。

rsync -av * server2::sharename/B

ただし、興味深いのは、.htaccessまたはディレクトリAの隠しファイルを除くすべてのファイルとディレクトリを同期することです。サブディレクトリ内の隠しファイルはすべて同期されます。

また、次のコマンドも試しました。

rsync -av --include=".htaccess" * server2::sharename/B

しかし、結果は同じです。

Aディレクトリの隠しファイルが同期されない理由とその修正方法。 rootユーザーとして実行しています。

ありがとう

78
Sangfroid

これは、*がデフォルトで現在の作業ディレクトリにある名前がドットで始まるファイルを除くすべてのファイルに展開されるためです。したがって、rsyncはこれらのファイルを引数として受け取ることはありません。

現在の作業ディレクトリを示す.rsyncに渡すことができます。

rsync -av . server2::sharename/B

このようにすると、rsync*が展開される場所でファイルを探すのではなく、現在の作業ディレクトリで転送するファイルを探します。

または、次のコマンドを使用して、*をドットで始まるファイルを含むすべてのファイルに展開できます。

shopt -s dotglob

shopt manpage も参照してください。

98
Adam Zalcman

サーバー間でディレクトリ(すべての隠しファイルを含む)を同期しようとしている人-たとえば、source-serversomedirAを宛先サーバーのsomedirBに同期-これを試してください

rsync -avz -e ssh --progress user@source-server:/somedirA/ somedirB/

両方のパスの最後にあるスラッシュに注意してください。他の構文は予期しない結果につながる可能性があります!


また、宛先サーバーからrsyncコマンドを実行するのが最も簡単です。適切な書き込みアクセス権があることを確認するのが簡単だからです(つまり、コマンドにSudoを追加する必要がある場合があります)上記)。

おそらく言うまでもありませんが、明らかに、リモートユーザーにはソースサーバー上のsomedirAへの読み取りアクセスも必要です。 :)

46
Brian Lacy

同じ問題がありました。

私にとって次のコマンドを実行したとき、隠しファイルは実行しましたnot get rsync'ed

rsync -av /home/user1 server02:/home/user1

しかし、パスの最後にスラッシュを追加すると、隠しファイルは再同期されました。

rsync -av /home/user1/ server02:/home/user1/

パスの最後のスラッシュに注意してください、ブライアンレイシーはスラッシュがキーだと言った。私は彼の投稿にコメントする評判がありません。

19
harleygolfguy

問題はシェルワイルドカードの拡張によるものだと思います。つかいます 。星の代わりに。

次のディレクトリコンテンツの例を検討してください

$ ls -a .
. .. .htaccess a.html z.js

シェルのワイルドカード展開は、rsyncプログラムが取得する引数リストを変換します

-av * server2::sharename/B

-av a.html z.js server2::sharename/B

コマンドの実行が開始される前。

3
vkraemer

*は、隠しファイルを同期しないようにrsynchに指示します。省略しないでください。

2
DonCallisto