rsync --deleteは、ソースディレクトリを維持し、ファイルをターゲットディレクトリと同期させるための正しい構文を完全に理解します。

rsync --deleteは、ソースディレクトリを維持し、ファイルをターゲットディレクトリと同期させるための正しい構文を完全に理解します。

私は次のコマンドを実行しています:

rsync -av --dry-run /home/acnt/public_html/_private/database/static/categories/temp/ --delete-after /home/acnt/public_html/_private/database/static/categories/

多くのテストでは、一時ディレクトリを保持せずに、すべてのファイルとディレクトリツリー全体とカテゴリツリーの下にある他のすべてのディレクトリを削除します。

/home/acnt/public_html/_private/database/static/categories/
/home/acnt/public_html/_private/database/static/categories/temp
/home/acnt/public_html/_private/database/static/categories/dir1
/home/acnt/public_html/_private/database/static/categories/dir1/temp
/home/acnt/public_html/_private/database/static/categories/dir2
/home/acnt/public_html/_private/database/static/categories/dir2/temp

このディレクトリをカテゴリの下に保持したいのですが、構文が正しくありません。

私が望むのは、一時ディレクトリの内容が/home/acnt/public_html/_private/database/static/categories/temp/見つからないファイルと/home/acnt/public_html/_private/database/static/categories/同期して削除する方法です。/home/acnt/public_html/_private/database/static/categories//home/acnt/public_html/_private/database/static/categories/temp/

このようにrsyncを使用できるのか、ここでツリー構造が問題なのか疑問に思います。

答え1

問題はターゲットディレクトリです含むソースディレクトリ。ソースディレクトリは、ターゲットディレクトリ階層の一部であるため(そして明らかに含まれていないため)修正(削除)されています。それ自体)。

この問題を解決するには、(ソースディレクトリ)を(ターゲットディレクトリ)以外の.../categories/temp場所に移動することをお勧めします。.../categoriesこれにより、ソースディレクトリがターゲット層の一部であるため、変更されません。

答え2

tempターゲット内のディレクトリからコピーする場合は、ターゲットrsyncからそのサブツリーを削除しないように指示する必要があります。

この場合、除外されたディレクトリツリーはtempターゲットツリーの一番上にあるため、サフィックスの付いたファイルではなくディレクトリを除外したい/temp場合は、最終除外はになります。rsync//temp/

base=/home/acnt/public_html/_private/database/static/categories
rsync --dry-run -av --delete-after --exclude '/temp/' "$base/temp/" "$base/"

$baseソリューションがより明確になるようにパスを短くするために使用します。

関連情報