我有一个在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。