You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

rsync以挂载的内部SSD为源时出现语法/用法错误及权限问题求助

rsync以挂载的内部SSD为源时出现语法/用法错误及权限问题求助

看起来你遇到的是脚本语法细节和挂载权限的混合问题,咱们一步步来拆解排查:

首先看你提到的两个核心错误:

  • rsync error: syntax or usage error (code 1) at main.c(1850) [Receiver=3.2.7]
  • /home/jc/backup.sh: line 67: /media/Movies: Is a directory

第二个错误其实是关键线索——它说明你的shell在尝试直接执行/media/Movies这个目录,而不是把它作为rsync的参数传递。这大概率是脚本里的换行语法出了问题,咱们先解决这个:

1. 修正rsync命令的换行反斜杠

你用反斜杠给rsync命令换行的思路是对的,但要注意:反斜杠后面绝对不能有任何空格或制表符,必须紧跟换行。如果反斜杠后面不小心加了空格,shell会把反斜杠当成普通字符,导致前面的命令片段被当成完整指令执行,后面的$SRC就变成了单独的命令(而目录本身无法被执行,所以报错)。

修正后的rsync命令应该是这样(确保每一行末尾的反斜杠后无多余字符):

rsync -av --update --delete                  \
--log-file='/home/jc/rsync-movies2.log'  \
--exclude='*/tvshows'                    \
"$SRC" \
"$DST"

2. 给变量加上双引号

把$SRC和$DST用双引号括起来是个必须养成的好习惯:即使现在路径里没有空格,也能避免路径包含特殊字符(比如空格、括号)时出现解析错误,同时防止变量为空时导致rsync参数异常。

3. 排查挂载点的权限问题

你提到改了挂载文件夹的所有权,但可能挂载时的fstab选项覆盖了这些设置。打开你的/etc/fstab,找到对应UUID的那一行,检查挂载选项(第四个字段):

  • 如果是ext4这类支持权限的文件系统,可以加上uid=你的用户ID,gid=你的用户组ID(比如defaults,uid=1000,gid=1000,1000通常是普通用户的ID),这样挂载后普通用户就能正常读写/media/Movies了。
  • 也可以用umask=002来让同组用户拥有读写权限,根据你的需求调整。

修改fstab后,重新挂载生效:

sudo umount /media/Movies
sudo mount /media/Movies

4. 远程目标的权限问题

用sudo运行脚本时,rsync会以root身份连接远程服务器,可能远程服务器的/srv/dev-disk-by-uuid-92b7ffea-567b-4480-aecc-5bb292e8a296/Backup2路径不允许root访问,或者远程sshd配置禁止root登录。

推荐的解决办法:

  • 在目标路径前加上远程服务器的普通用户名,比如jc@192.168.50.156:/srv/.../Backup2,确保这个用户对目标路径有读写权限。
  • 如果你必须用root操作远程,需要修改远程服务器的sshd_config(设置PermitRootLogin yes),但这种做法安全性较差,不推荐。

最后测试

先手动执行修正后的rsync命令,看看能不能正常运行:

SRC='/media/Movies'
DST='192.168.50.156:/srv/dev-disk-by-uuid-92b7ffea-567b-4480-aecc-5bb292e8a296/Backup2'
rsync -av --update --delete --log-file='/home/jc/rsync-movies2.log' --exclude='*/tvshows' "$SRC" "$DST"

如果手动执行没问题,再把脚本里的命令改成这样,应该就能解决问题了。

备注:内容来源于stack exchange,提问作者Lost_Ones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 11:45:26