
ファイルをサーバーにバックアップしようとしていますが、ファイル名にスペースがあるという問題があります。
端末で次のコマンドを使用します。
FILES="testing/space\ in\ filename testing/and\ again"; rsync -v $FILES server::address
testing
は2つのファイルがあるフォルダspace in filename
ですand again
。
実行すると、次のような結果が得られます。
rsync: link_stat "/home/user/testing/space\" failed: No such file or directory (2)
rsync: link_stat "/home/user/in\" failed: No such file or directory (2)
rsync: link_stat "/home/user/filename" failed: No such file or directory (2)
rsync: link_stat "/home/user/testing/and\" failed: No such file or directory (2)
rsync: link_stat "/home/user/again" failed: No such file or directory (2)
そのオプションを試してみるか悩んでみましたが、--protect-args
実行に移すことができませんでした。
答え1
内部フィールド区切り記号(IFS)を一時的に変更できます。
FILES="long filename with spaces
another one"
OLDIFS="$IFS"
IFS=$'\n'
rsync -v $FILES server::address
IFS="$OLDIFS" # restores default behaviour
ちなみにこれは$'\n'
シャミズムです。他のPosixシェルでこれを試すことができます:
IFS="
"
複数のファイルを処理するには、新しいIFS(上記の場合は改行)でファイルを区切ります。改行文字を目的の文字に置き換えることもできます。