rsyncにターゲットの特定のフォルダを削除しないように指示する方法は?

rsyncにターゲットの特定のフォルダを削除しないように指示する方法は?

そのため、ペリカンを使用してブログを作成し、rsyncを使用してコンテンツ全体をアップロードします。いいね

しかし、私はLet's Encryptも使用しているので、Webサイトのルートに.well-knownリポジトリを維持する必要があります。

「rsync ... --do-not-delete .well-known ...」と言う方法はありますか?

現在、これらの代理人は権限が保護されていますが、rsyncはそれを好きではありません。

これは現在rsyncコマンドです(私が書いたものではなく、ペリカン自体によってインストールされています)。

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude

注:rsyncの効率を改善するためのいくつかの提案がある場合は、これを受け入れます(例:トピックから逸​​脱しました)。

答え1

~からman rsync

--deleteこれはrsyncに、受信側から不要なファイル(送信側にないファイル)を削除するように指示しますが、同期されているディレクトリからのみ削除します。ディレクトリの内容( "dir / *"など)にワイルドカードを使用せずにディレクトリ全体( "dir"または "dir /"など)を送信するようにrsyncに要求する必要があります。ワイルドカードはシェルによって拡張されるため、rsyncはファイルの親ディレクトリではなく単一のファイルを転送するように要求されます。 --delete-excludedオプションを使用するか、転送側でのみ一致するようにルールを表示しない限り、転送から除外されたファイルは削除されません。 (フィルタルールセクションの修飾子を含む/除外を参照)

だから私はそうすべきだと思います。

rsync -e "ssh -p $(SSH_PORT)" -P -rvzc --delete \
$(OUTPUTDIR)/ \
$(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) \
--cvs-exclude --exclude=/.well-known

.well-knownのルートを仮定$(SSH_TARGET_DIR)/

答え2

--excludeこのディレクトリを無視するには、このオプションを使用する必要がありますrsync。また、使用しない限りこれを無視します--delete-excluded(この場合は使用しないでください)。

関連情報