我尝试通过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
脚本
有什么线索?
答案 0 :(得分:1)
这不是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"