rsyncがディレクトリを追加するのはなぜですか?

rsyncがディレクトリを追加するのはなぜですか?

昔は走っていました。

rsync -rv /home/myname/mydir1 myhost:/home/myname/mydir1

そして得た

/home/mydir1/mydir1/...

重複した「m​​ydir1」がないように、この問題をどのように解決できますか?

答え1

使用法セクションの例を参照してください。rsync のマニュアルページ

あなたはそれを使用することができます

rsync -rv /home/myname/mydir1 myhost:/home/myname

または

rsync -rv /home/myname/mydir1/ myhost:/home/myname/mydir1

答え2

rsync -rv /home/myname/mydir1/* myhost:/home/myname/mydir1

mydir1の下のファイル(およびサブディレクトリ)のみをコピー

rsync -rv /home/myname/mydir1 myhost:/home/myname/mydir1

ディレクトリ自体をコピーしてmydir1 / mydir1を取得します。

    francois@zaphod:~/tmp$ rm -rf b
    francois@zaphod:~/tmp$ mkdir b
    francois@zaphod:~/tmp$ rsync -rv a/* b
    sending incremental file list
    a

    sent 80 bytes  received 35 bytes  230.00 bytes/sec
    total size is 0  speedup is 0.00
    francois@zaphod:~/tmp$ tree b
    b
    └── a

    0 directories, 1 file


 francois@zaphod:~/tmp$ rm -rf b
    francois@zaphod:~/tmp$ rsync -rv a b
    sending incremental file list
    created directory b
    a/
    a/a

    sent 108 bytes  received 63 bytes  342.00 bytes/sec
    total size is 0  speedup is 0.00
    francois@zaphod:~/tmp$ tree b
    b
    └── a
        └── a

    1 directory, 1 file

答え3

/これはテールゲートが重要なまれな状況です。fooと指定は多くのコマンドでfoo/同じです。しかし、意味上違いがあります。 rsync を含むいくつかのコマンドでは、末尾は/これがディレクトリであるという事実に基づいて特別なタスクを実行するようにコマンドに指示します。次のような状況が発生した場合...

mkdir foo bar
touch foo/baz

...そしてfooからbarにコンテンツをコピーしたい場合は指定しないでください...

rsync -rv foo bar

...代わりに指定してください...

rsync -rv foo/ bar

それ以外の場合、rsyncはツリー全体(親ディレクトリを含む)を見つけた宛先ディレクトリにコピーするとします。


他の同様の例効果的なリンクをリストするときの意味は次のとおりですls

mkdir foo
touch foo/baz
ln -s foo bar

ls -l bar
lrwxrwxrwx 1 philip philip 3 May  7 14:58 bar -> foo

ls -l bar/
total 0
-rw-r----- 1 philip philip 0 May  7 14:58 baz

関連情報