目前,我们的备份脚本每晚都会在我们的每个存储库上显式运行 svnadmin hotcopy。我们的 repos 都存储在一个父目录下 (/usr/local/svn/repos) 我们的备份脚本对该目录下的每个存储库都有一行,如下所示: svnadmin hotcopy/usr/local/svn/repos/myrepo1/usr/local/backup/myrepo1
我希望使用 find 命令为它在/usr/local/svn/repos 下找到的每个目录运行 svnadmin hotcopy,而不是必须为每个我们上线的新 repo 手动添加一个新行。
到目前为止我有:
find /usr/local/svn/repos/ -maxdepth 1 -mindepth 1 -type d -exec echo /usr/local/backup{} \;
,为了简单起见,我将“svnadmin hotcopy”替换为“echo”。 其输出为:
/usr/local/backup/usr/local/svn/repos/ure
/usr/local/backup/usr/local/svn/repos/cheetah
/usr/local/backup/usr/local/svn/repos/casemgt
/usr/local/backup/usr/local/svn/repos/royalliver
/usr/local/backup/usr/local/svn/repos/ure_andras
/usr/local/backup/usr/local/svn/repos/profserv
/usr/local/backup/usr/local/svn/repos/frontoffice
/usr/local/backup/usr/local/svn/repos/ure.orig
/usr/local/backup/usr/local/svn/repos/projectcommon
/usr/local/backup/usr/local/svn/repos/playground
/usr/local/backup/usr/local/svn/repos/casegen
问题是完整路径包含在 {} 中。我只需要传递给 -exec 的目录名的最后一个元素
我想要的输出是:
/usr/local/backup/ure
/usr/local/backup/cheetah
/usr/local/backup/casemgt
/usr/local/backup/royalliver
/usr/local/backup/ure_andras
/usr/local/backup/profserv
/usr/local/backup/frontoffice
/usr/local/backup/ure.orig
/usr/local/backup/projectcommon
/usr/local/backup/playground
/usr/local/backup/casegen
我几乎卡在了这一点上。有人可以帮我从这里出去吗? 提前致谢, 戴夫
最佳答案
您走在正确的轨道上。试试这个:
find /usr/local/svn/repos/ -maxdepth 1 -mindepth 1 -type d -printf "%f\0" | xargs -0 -I{} echo svnadmin hotcopy /usr/local/svn/repos/\{\} /usr/local/backup/\{\}
%f
类似于 basename
并且 null 加上 xargs 上的 -0
确保带有空格等的名称被传递顺利通过。
只需删除 echo
并进行您可能需要的任何调整,它就可以解决问题。
关于linux - 如何使用 FIND 递归备份多个颠覆存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1612904/