使用变量列表进行 Rsync

使用变量列表进行 Rsync

我正在尝试编写一个 bash 脚本,该脚本将仅 rsync 特定文件夹子集。我试图找出一个更巧妙的方法,这样我就可以添加一个变量,例如,FOLDER1='name of folder in home directory'然后

rsync -arvz --delete /home/emka/$FOLDER1/ /home/emka/Desktop/Mount/$FOLDER1

目前我已经FOLDER1通过了FOLDER13,但我不想再出现上述十三遍了。

有人可以告诉我该怎么做吗?

答案1

Bash 允许你使用数组循环

将每条路径定义为数组的元素,然后循环遍历数组。

答案2

这里有些人似乎没有正确阅读原始问题,但正如有人建议的那样:你可以(也应该)使用数组。如果你确实将文件夹名称存储在变量FOLDER1FOLDER2等中,并且希望保持这种状态,则可以使用以下命令:

for i in {1..13}; do
   eval "FOLDER=\$FOLDER$i"
   rsync -arvz --delete "/home/emka/$FOLDER/" "/home/emka/Desktop/Mount/$FOLDER"
done

使用引号是一个好习惯,在这种情况下它们是必需的,因为目录名称中有空格。

答案3

Bash 3.0+ 支持范围数组。

for i in {1..13}
do
    rsync -arvz --delete /home/emka/FOLDER${i}/ /home/emka/Desktop/Mount/FOLDER${i}
done

答案4

使用 Bash 括号扩展你可以这样做:

rsync -arvz --delete /home/emka/$FOLDER{1..13} /home/emka/Desktop/Mount/

如果您想使用数组(正如某些人建议的那样,这是一个好主意),那么仍然可以使用一个没有循环的 rsync,只要数组中的文件夹名称不以斜杠结尾。

cd /home/emka
rsync -arvz --delete ${folderarray[@]} /home/emka/Desktop/Mount/

在此行的开头放置“echo”以查看它在第一次使用之前会做什么:-)

相关内容