2017-07-16 15 views
-1

rsyncからraspberry pi 3にファイルを同期しようとしています。rsyncワイルドカードが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" 

しかし、これは私が"/home/user/"を行う場合は、スクリプトが動作しますが、すべてのファイルをコピーするだけでなくmp3されて、私に次のエラーメッセージ

rsync: link_stat "/home/user/*.mp3" failed: No such file or directory (2) 

を与えます。だから私はこのワイルドカードはこの中で動作していないと思いますbashスクリプト

何か手がかりは何ですか?

答えて

1

これはrsyncワイルドカードではありませんが、bashワイルドカード(別名グロブ)です。 rsyncが呼び出される前に、Bashはそれをファイルのリストに置き換えます。

しかし、bashは単語の分割を行うと引用された変数のglobをしません:に

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

関連する問題