2017-07-16 163 views
-1

我嘗試通過rsync將文件同步到我的raspberry pi 3rsync通配符在bash腳本中不起作用

rsync -v -P -r --size-only --remove-source-files /home/user*.mp3 [email protected]:/media/hdd/ 

此命令正常工作,只複製mp3文件。

由於文件並不都在同一個地方,我不想一直鍵入命令,所以我做了一個bash腳本,這樣我就可以將路徑更改爲源和目標。

echo "ENTER PATH" 
read -i "/home/user/*.mp3" -e path 

echo "ENTER DESTINATION!" 
read -i "[email protected]:/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腳本中不工作

任何線索爲什麼?

回答

1

這不是rsync通配符,而是bash通配符,又名glob。 Bash將用rsync之前的文件列表替換它。

然而,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" 
+0

謝謝,這解決了這個問題。不知道這可能是一個這樣簡單的解決方案。再次感謝你,非常感謝。 – wombat