我正在尝试自动执行svnadmin dump
备份脚本的命令,我想做这样的事情:
find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;
这似乎有效,因为它查看中的每个 svn 存储库/var/svn
并svnadmin dump
在其上运行。
但是,exec 命令中的第二个{}
不会替换正在处理的目录的名称。它基本上只是生成一个名为的文件{}.svn
。
我怀疑这是因为 shell 解释>
为结束该find
命令,并且它尝试将该命令的标准输出重定向到名为 的文件{}.svn
。
有任何想法吗?
答案1
您可以像这样进行重定向:
find /var/svn/* \( ! -name dir -prune \) -type d -exec sh -c 'svnadmin dump {} > {}.svn' \;
并会进行正确的替换。
答案2
不,但是您可以编写一个简单的 bash 脚本来执行此操作,然后从 find 中调用它。
示例 (/tmp/dump.sh):
#!/bin/sh
svn admin dump "$1" > "$1".svn
然后:
find /var/svn/* \( ! -name dir -prune \) -type d -exec sh /tmp/dump.sh '{}' \;