在 macOS Sonoma 上使用 rsync 时出现问题

在 macOS Sonoma 上使用 rsync 时出现问题

我买了一台新的 Mac mini。在使用 Catalina 之前。我经常使用 rsync 来备份我的照片。我的旧脚本不再起作用了,我不知道该怎么办。

我正在使用 Homebrew 安装的 Rsync 版本;rsync 3.2.7_1

首先,我更改了源目录的位置,路径中有空格,但我认为我设法暂时解决了这个问题。我没有设法SOURCE_DIR正确修改,仍在寻找如何正确重写源路径。

其次,当我执行脚本时,远程服务器要求我输入密码,但它拒绝了。即使我复制了 SSH 密钥,它也会要求我输入密码。我可以从终端打开 SSH 会话而无需输入密码,但它无法与 Rsync 一起使用。

#!/bin/bash
    
#EXCLUSIONS="/Users/Fred/Scripts/excludePhotobackup.ini"
LOG_FILE="/Users/Fred/Logs/$(date +%Y%m%d-%H%M%S)_PhotoBackUp.log"
# LOG_FORMAT="%o %f %l sent %b"
#SOURCE_DIR="/Volumes/Macintosh\ HD\ -\ Externe/Photos/"
#SOURCE_DIR="/Volumes/Test/"
TARGET_DIR="/share/Multimedia/Photos/"
TARGET_SERVER="[email protected]"
# SSH="ssh -p 22"
    
rsync --protect-args -s --dry-run --archive --verbose --exclude-from=$EXCLUSIONS --log-file=$LOG_FILE --log-file-format="%o %f %l sent %b" --progress --compress --human-readable --stats -e "ssh -p 22" $SOURCE_DIR \ $TARGET_SERVER:\''/Volumes/Maci>
    
exit 0

答案1

这是您的脚本的清理版本,其中包含两个不同的修改版本。请注意,此时您的原始 Rsync 命令已被截断,$TARGET_SERVER:\''/Volumes/Maci>所以嘿;我解决了这个问题。

#!/bin/bash

# EXCLUSIONS="${HOME}/Scripts/excludePhotobackup.ini";
LOG_FILE="${HOME}/Logs/$(date +%Y%m%d-%H%M%S)_PhotoBackUp.log";
# LOG_FORMAT="%o %f %l sent %b";
# SOURCE_DIR='"/Volumes/Macintosh HD - Externe/Photos/"';
SOURCE_DIR='"/Volumes/Macintosh HD - Externe/Photos/"';
# SOURCE_DIR='"/Volumes/Test/"';
TARGET_DIR='"/Volumes/Macintosh HD - Externe/Photos/"';
TARGET_SERVER="[email protected]";
SSH="ssh -p 22";

# Original query.
# echo rsync --protect-args -s --dry-run --archive --v --exclude-from=$EXCLUSIONS --log-file=$LOG_FILE --log-file-format="%o %f %l sent %b" --progress --compress --human-readable --stats -e "ssh -p 22" $SOURCE_DIR \ $TARGET_SERVER:\''/Volumes/Macintosh\ HD\ -\ Externe/Photos/';
# Modified version 1 with SSH.
# rsync --dry-run -savzh --progress --stats --exclude-from="${EXCLUSIONS}" --log-file="${LOG_FILE}" --log-file-format="%o %f %l sent %b" -e "${SSH} ${SOURCE_DIR} ${TARGET_SERVER}:${TARGET_DIR}";
# Modified version 2 without SSH.
rsync --dry-run -savzh --progress --stats --exclude-from="${EXCLUSIONS}" --log-file="${LOG_FILE}" --log-file-format="%o %f %l sent %b" "${SOURCE_DIR}" ${TARGET_SERVER}:"${TARGET_DIR}";

exit;

一般清理项目 — — 例如以分号 ( ;) 结束行 — — 但主要清理 Rsync。

  • 我压缩了许多 Rsync 选项-savzh,以便于阅读。
  • "在命令中的变量中添加双引号 ( ) 以及括号 ( {/ })。
  • 在路径变量中添加了单引号 ( ');它有助于避免转义空格等。这允许在其中使用双引号。
  • 使用 SSH 修改版本 1:使用 的原始查询的版本-e ssh
  • 修改版本 2,无需 SSH:原始查询的版本不使用。我在我的示例中支持这一点,并取消了注释,因为我认为您根本-e ssh不需要它。-e ssh

无论如何,我看到你已经发布了答案,但我希望这会有所帮助。

答案2

好的,对于路径中的空格,解决方案非常简单,我所要做的就是添加双引号“/带空格的路径”

对于密码问题,这是因为我弄乱了源参数和目标参数。

相关内容