ダウンロードするファイルおよび/またはディレクトリを指定するためにrsyncにパラメータを渡すために使用できるBASH関数を作成しようとしています。サーバーにダウンロードする次のファイルがあるとします。空白と下線は意図的なものです。ファイルにスペースがあることが重要です。
dir1/file 1 with really long name.txt
dir1/file 2_with_shorter_name.txt
現在私は以下を持っています:
CMD="ssh -i~/.ssh/some_key"
LOGIN="[email protected]"
dl()
{
rsync -Pzr --compress-level=9 -e "$CMD" "$LOGIN":"$@" ./
}
これら2つのファイルをダウンロードするには、次のようにこの関数を呼び出そうとします。
dl "dir1/file\ *"
dl
(アスタリスクを私の関数に渡してrsyncを介してサーバーに渡すことができることを本当に望んでいます)
ただし、rsync は次のエラーで終了します。
receiving incremental file list
rsync: link_stat "/home/user/dir1/file\ *" failed: No such file or directory (2)
rsync error: some files/attrs were not transferred (see previous errors (code 23) at main.c(1655) [Receiver=3.1.1]
rsync: [Receiver] write error: Broken pipe (32)
私がここで引用した内容に何か問題があるようです...私が間違っていることを知っている人はいますか?関数ではなく、独自にrsyncを呼び出すと、期待どおりに動作します。
rsync -Pzr --compress-level=9 -e "ssh -i~/.ssh/some_key" "[email protected]":"dir1/file\ *" ./
修正する:
の出力にはssh -v
次の行があります。
rsync --server --sender -vrze.iLsfx --compress-level=9 . dir1/file\\ *
驚くべきことに、コマンドは実際に魔法のように動作し、ファイルがダウンロードされています。もし私が以前に通り過ぎた道に誤字を出したのではないでしょうか?残念ながら.bash_history
、今はそのアイテムが削除されていることがわかりません。とにかく、rsyncコマンドは正しく表示されますか?