bashスクリプト内の1回の呼び出しで複数のディレクトリをrsyncしようとしていますが、パスを引用するための構文で問題が発生しています。
これが私が試していることです:
backuppath='/path/to/backup/folders/'
declare -a backupitems=('folder1' 'folder2')
backupitems=(${backupitems[@]/#/\"$backuppath})
backupitems=(${backupitems[@]/%/\"})
backup=${backupitems[@]}
rsync ${backup} /path/to/destination
そのようなファイルやディレクトリがないというlink_statエラーが"/path/to/current/directory"/path/to/backup/folders/folder1""
発生し、folder2でも同じエラーが発生します。したがって、引用符で囲まれたパスを希望どおりに生成しているように見えますが、rsyncはパスを相対パスとして解釈し、先頭の現在のディレクトリへのパスを追加しています。私がそうすればrsyncは正しく動作します
backuppath='path/to/backup/folders/folder1'
rsync "${backuppath}" /path/to/destination
引用符をrsyncコマンドに入れますが、複数のディレクトリを長い単一のパスとして扱うため、1つの変数内の複数のフォルダーでこれを行うことはできません。2番目の方法を使用して、フォルダーをループし、各フォルダーでrsyncを呼び出すことでスクリプトを機能させましたが、スクリプトの他の部分がフォルダーを処理する方法のため、この方法は少し厄介なので、最初の方法を取得したいと思います。クイックフィックスがある場合に機能します。
編集:
上記の最上位バージョンでは、ディレクトリ名にスペースが含まれていないため、次のコマンドを使用していset -vx
ます。rsync'"/ path / to / backup / folder / folder1"''" / path / to / backup / folder / folder2 "'/ path / to / destination
次のエラーメッセージが表示されます。
rsync: link_stat "/path/to/current/directory/"/path/to/backup/folders/folder1"" failed: No such file or directory (2)
@kdubsによって提案されたバージョンを使用する場合、パスにスペースがない場合はすべてが機能します。
パスにスペースがある場合、kdubsバージョンは次のコマンドになります。
rsync / path / to / backup / folder / folder1 / path / to / backup / folder / folder2 / path / to / destination
およびエラー:
rsync: link_stat "/path/to/back" failed: No such file or directory (2)
rsync: link_stat "/path/to/back up/up/folder1" failed: No such file or directory (2)
私の最初のバージョンでは、スペースを操作するために追加の調整が必要です。これは、[@]で配列を展開し、展開を()で囲むことによって新しい配列を作成すると、パス内のスペースがパスを複数の配列要素に分割するためです(Toninの回答を参照)下)。