bashの変数またはループ配列から複数のディレクトリを1つのフォルダにコピーしますか?

bashの変数またはループ配列から複数のディレクトリを1つのフォルダにコピーしますか?

100を超えるディレクトリをターゲットにコピーを実行しようとしています。スクリプト全体を1つのファイルに含める必要があるため、ディレクトリを別のファイルに保存することはできません。後でこのスクリプトを編集し、追加のディレクトリを簡単に追加できることを願っています。一部のディレクトリにはスペースがあります。

#!/bin/bash

dirs=(
/dir/subdir1/anotherdir/*/.log
~/dir/subdir/file.t
/dir2/subdir2/anotherdir/*/.db
/dir2/some dir here/another/here*.*
...
...
)
dest=( my@destination)

rsync -args "$dirs" $dest

試してみましたが、"${dirs[@]}"成功した結果が得られなかったので、間違って使っているようです。

ベストアンサー1

フォルダーまたはファイル名の間にスペースを含むパスを使用する場合は、バックスラッシュを使用して\スペースを指定する必要があります。スペースを含むファイル名にのみまたはを使用することもできます'dir space'。変数"dir space"に関するすべてのパスを取得するには、$dirsinを使用する必要があります。"${dirs[@]}""$dirs"

バックラッシュを使用したソリューション:

#!/bin/bash

dirs=(
/dir/subdir1/anotherdir/*/.log
~/dir/subdir/file.t
/dir2/subdir2/anotherdir/*/.db
/dir2/some\ dir\ here/another/here*.*
...
...
)
dest=("user@hostname:destination")

rsync -args "${dirs[@]}" "${dest[@]}"
#"${dest[@]}" is useful here because dest var has one item.
#or you can use ${dest[someindex]}:
rsync -args "${dirs[@]}" "${dest[0]}"

二重引用符または一重引用符を使用したソリューション:

#!/bin/bash

dirs=(
/dir/subdir1/anotherdir/*/.log
~/dir/subdir/file.t
/dir2/subdir2/anotherdir/*/.db
/dir2/"some dir here"/another/here*.*
/dir2/'some dir here'/another/here*.*
...
...
)
dest=("user@hostname:destination")

rsync -args "${dirs[@]}" "${dest[@]}"
#"${dest[@]}" is useful here because dest var has one item.
#or you can use ${dest[someindex]}:
rsync -args "${dirs[@]}" "${dest[0]}"

メモ:実際にターゲットを割り当てるために配列を使用する必要はなく、単に次のものを使用できます。dest='my@destination'

おすすめ記事