linux - 如何使用 FIND 递归备份多个颠覆存储库

标签 linux svn bash find

目前,我们的备份脚本每晚都会在我们的每个存储库上显式运行 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/

相关文章:

c - 使用堆栈的中缀到后缀的转换

linux - 并行进程 : appending outputs to an array in a bash script

linux - 为什么挂起的 SSH 命令等待来自服务器上两端都打开的管道的输出 'sshd'?

linux - 无法从局域网访问tomcat网页

database - 持续集成和数据库管理

python - proc.communiate() 不等待 svn 命令完成

python - 一个可以被python和shell读取的配置文件

linux - linux中eth1上的静态IP地址

svn - 使TortoiseSVN将文件的修改时间设置为最新修订的时间戳

bash - 为什么我的带反引号的 if 语句不能正常工作?