バックアップスクリプトのsvnadmin dump
コマンドを自動化しようとしています。次のようにしたいのですが。
find /var/svn/* \( ! -name dir -Prune \) -type d -exec svnadmin dump {} > {}.svn \;
これは/var/svn
の各svnリポジトリを調べ、svnadmin dump
を実行するという点で機能しているようです。
ただし、execコマンドの2番目の{}
は、処理中のディレクトリの名前に置き換えられません。基本的には、{}.svn
という名前の単一のファイルが生成されます。
これは、シェルが>
を解釈してfind
コマンドを終了し、stdoutをそのコマンドから{}.svn
という名前のファイルにリダイレクトしようとしたためと考えられます。
何か案は?
次のようにリダイレクトできます。
find /var/svn/* \( ! -name dir -Prune \) -type d -exec sh -c 'svnadmin dump {} > {}.svn' \;
正しい置換が行われます。
いいえ、ただし、それを行う簡単な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 '{}' \;