我正在尝试编写一个 bash 脚本,该脚本将仅 rsync 特定文件夹子集。我试图找出一个更巧妙的方法,这样我就可以添加一个变量,例如,FOLDER1='name of folder in home directory'
然后
rsync -arvz --delete /home/emka/$FOLDER1/ /home/emka/Desktop/Mount/$FOLDER1
目前我已经FOLDER1
通过了FOLDER13
,但我不想再出现上述十三遍了。
有人可以告诉我该怎么做吗?
答案1
答案2
这里有些人似乎没有正确阅读原始问题,但正如有人建议的那样:你可以(也应该)使用数组。如果你确实将文件夹名称存储在变量FOLDER1
、FOLDER2
等中,并且希望保持这种状态,则可以使用以下命令:
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”以查看它在第一次使用之前会做什么:-)