如何优化bash脚本中的SVN备份过程?

我有一个在AIX中运行的shell脚本,它将每天晚上为每个SVN存储库执行备份。 执行如下:

下载每个存储库保存为转储文件:

svnrdump on repo_A svnrdump on repo_B svnrdump on repo_X ## X is the subsequent number of repository 

下载过程完成后,内容将被压缩:

 bzip2 --compress repo_A_yyyymmdd.dump bzip2 --compress repo_B_yyyymmdd.dump bzip2 --compress repo_X_yyyymmdd.dump ## X is the subsequent number of backup copy 

然后,我将通过从今天删除比第五天更长的副本(我只需要保留最近5个最新的备份副本)来对备份副本进行pipe理:

 rm `ls -t repo_A_????????.dump.bz2 | tail -n +6` rm `ls -t repo_B_????????.dump.bz2 | tail -n +6` rm `ls -t repo_X_????????.dump.bz2 | tail -n +6` ## X is the subsequent number of backup copy 

我的问题

有没有办法通过将这些repo name放入一个数组,然后在循环中执行每个repo的每个命令来优化此代码?

或者:

 repodir=/some/path backupdir=/some/otherpath maxagedays=6 for repo in repo_A repo_B repo_X; do svnadmin dump $repodir/$repo | bzip2 -9 > $backupdir/$repo-`date +%F`.dump.bz2 done find /$backupdir -type f -iname *dump.bz2 -mtime +$maxagedays -exec rm -f {} \; 

尝试这样的事情:

第一种forms,后缀数组:

 #!/bin/bash array=(ABCDEF) for i in "${array[@]}" do echo svnrdump on repo_$i echo bzip2 --compress "repo_$i.dump" done 

第二种forms,如果回购的名字更多样:

 #!/bin/bash while read REPO; do echo svnrdump on "${REPO}" echo bzip2 --compress "${REPO}".dump done << REPOLIST repo0 repo1 repo2 repo3 REPOLIST 

您将不得不将所有回购添加到REPOLIST。