我尝试通过 rsync
将文件同步到我的 raspberry pi 3
。
rsync -v -P -r --size-only --remove-source-files /home/user*.mp3 osmc@192.168.0.110:/media/hdd/
这个命令工作正常,只复制 mp3
文件。
由于文件并不都在同一个地方,而且我不想一直键入命令,所以我做了一个 bash
脚本,这样我就可以更改源和目标的路径。
echo "ENTER PATH"
read -i "/home/user/*.mp3" -e path
echo "ENTER DESTINATION!"
read -i "osmc@192.168.0.110:/media/hdd/" -e dest
rsync -v -P -r --size-only --remove-source-files "$path" "$dest"
但这给了我以下错误信息
rsync: link_stat "/home/user/*.mp3" failed: No such file or directory (2)
如果我执行 "/home/user/"
脚本正在运行,但不仅复制所有文件 mp3
。所以我猜通配符在这个 bash
脚本中不起作用
有什么线索吗?
最佳答案
这不是 rsync
通配符,而是 bash
通配符,又名 glob。在调用 rsync
之前,Bash 将用文件列表替换它。
但是,bash 不会对引用的变量进行分词和通配:
var="/etc/*tab"
echo "Quoted:" "$var"
echo "Unquoted:" $var
结果:
Quoted: /etc/*tab
Unquoted: /etc/crontab /etc/fstab /etc/inittab /etc/mtab
您通常不希望 bash 弄乱您的变量,这就是为什么引用如此重要并且值得称赞的原因。然而,在这种情况下,您实际上确实想要扩展路径名,因此您应该小心地不给变量加上引号:
# Prevent word splitting, so that '/path with spaces/*.mp3' still works
IFS=""
# No quoting on $path, to allow glob expansion:
rsync -v -P -r --size-only --remove-source-files $path "$dest"
关于linux - rsync 通配符在 bash 脚本中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45133499/