この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_USER
REMOTE_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"