名前にスペースがある複数ファイルの再同期

名前にスペースがある複数ファイルの再同期

ファイルをサーバーにバックアップしようとしていますが、ファイル名にスペースがあるという問題があります。

端末で次のコマンドを使用します。

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(上記の場合は改行)でファイルを区切ります。改行文字を目的の文字に置き換えることもできます。

おすすめ記事