如何使用“{}”重定向通过 find 的 -exec 选项运行的命令的输出?

如何使用“{}”重定向通过 find 的 -exec 选项运行的命令的输出?

我正在尝试自动执行svnadmin dump备份脚本的命令,我想做这样的事情:

find /var/svn/* \( ! -name dir -prune \) -type d -exec svnadmin dump {} > {}.svn \;

这似乎有效,因为它查看中的每个 svn 存储库/var/svnsvnadmin 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 '{}' \;

相关内容