私は次のコマンドを実行しています:
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
ソリューションがより明確になるようにパスを短くするために使用します。