gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:41:16 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com