Rsyncが提供されているディレクトリの代わりに$ HOMEを同期しています。

Rsyncが提供されているディレクトリの代わりに$ HOMEを同期しています。

このrsyncコマンドが提供された実際のパスの代わりにホームディレクトリの内容を同期する理由をご存知ですか?

echo "\${REMOTE_STORAGE_PATH}: ${REMOTE_STORAGE_PATH}/files/"

rsync -zqr -e "ssh -p ${REMOTE_PORT}" --delete ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/files/" "${FILES_PATH}"

REMOTE_STORAGE_PATH正しい値(/var/storage)を使用すると、同期したいファイルが配置されます/var/storage/files。ただし、同期される内容は私のホームディレクトリの内容ですREMOTE_USER。例えば…何が原因ですか?どんなアイデアがありますか?

REMOTE_USERREMOTE_STORAGE_PATHディレクトリとサブディレクトリの所有者ですfiles

実際、最も混乱しているのは、同じスクリプトでほぼ直前にほぼ同じコード行があることです。

rsync -zqr -e "ssh -p ${REMOTE_PORT}" --delete --progress ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/database.sql" "${DUMPS_PATH}/${TARGET}.sql"

そして同期は正しいです。何のように?

ベストアンサー1

トラブルシューティング済みコメントから

このコマンドには問題はありませんrsync。代わりに、リモートディレクトリには実際には存在しないファイルが含まれています。


コマンドの簡単な説明は次のとおりです。

rsync -zqr \
    -e "ssh -p ${REMOTE_PORT}" \
    --delete \
    ${REMOTE_USER}@${REMOTE_SERVER}:"${REMOTE_STORAGE_PATH}/files/" \
    "${FILES_PATH}"

これには引用符のない変数拡張がたくさん含まれています。安全のために、次のように書きます。

rsync -zqr \
    -e "ssh -p '$REMOTE_PORT'" \
    --delete \
    "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_STORAGE_PATH/files/" \
    "$FILES_PATH"

直後の文字が変数名で有効な文字でない限り、usingは${variable}inとまったく同じです。$variable${variable}x

スクリプトでは、私はさらにいつも可能であれば、文書化の目的で長いオプションを使用してください。しかし、これは私の個人的な意見です。おそらく、ファイルメタデータ(タイムスタンプなど)を同期させるために代わりに--archive使用します。--recursive

rsync --compress --quiet --archive \
    --rsh="ssh -p '$REMOTE_PORT'" \
    --delete \
    "$REMOTE_USER@$REMOTE_SERVER:$REMOTE_STORAGE_PATH/files/" \
    "$FILES_PATH"

おすすめ記事