「{}」を使用して、findの-execオプションで実行されたコマンドの出力をリダイレクトするにはどうすればよいですか?


28

svnadmin dumpバックアップスクリプトのコマンドを自動化しようとしていますが、次のようなことをしたいと思います。

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

これは、の各svnリポジトリを調べて/var/svn実行svnadmin dumpするという点で機能しているようです。

ただし、{}execコマンドの2番目のコマンドは、処理中のディレクトリの名前の代わりにはなりません。基本的には、という名前の単一のファイルになります{}.svn

これは、シェル>findコマンドを終了すると解釈し、そのコマンドからstdoutをという名前のファイルにリダイレクトしようとするためだと思われます{}.svn

何か案は?

回答:


37

次のようにリダイレクトを行うことができます。

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

正しい置換が行われます。


これは欠陥があり、悪い習慣です。私のこの答えを比較してください。正しい方法は通過する{}の引数としてsh、次に(内部sh)としてそれを参照する"$0"か、"$1"またはそう。
カミルマシオロウスキ

5

いいえ、ただし、それを行う簡単な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 '{}' \;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.