2016-11-17 8 views
1

+ターミネータで-execにコマンドを実行することを拒否しますが、単に+\;に変更するとexecが実行されます。を含むfind -exec;実行されますが、ターミネータが "-execに引数がありません"と失敗した場合

find_args=(-type f -name "*users*" -cmin -60) 
rsync_args=(-avhP -e 'ssh -i /home/some_user/.ssh/id_rsa -c arcfour') 
[email protected]_host:/some/destination/ 

これは動作します:


は次のセットアップ後に、考えてみましょう

# runs rsync once per file, thus slower than it should need to be 
find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" \; 

...しかし、これは失敗します。

# exactly the same, except for + rather than \; 
# ...should use the same rsync call for multiple files. 
find . "${find_args[@]}" -exec rsync "${rsync_args[@]}" {} "$dest" + 

...とエラーfind: missing argument to '-exec'

私は+引数をサポートするために文書化されているGNU findutils 4.4.2を使用しています。 find -exec ... {} +

答えて

2

+{}直後(従って挿入引数が位置末尾になければならない)でなければなりません。指定したコマンドがこの要件を満たしていません。 sh -c [...]ラインは、もはやそれは後者のために働くことが保証され、元に渡される引数リストを実行しますrsyncラインよりも

find . -type f -name "*users*" -cmin -60 \ 
    -exec sh -c 'rsync -avhP -e "ssh -i /home/some_user/.ssh/id_rsa -c arcfour" "[email protected]" [email protected]_host:/some/destination/' _ {} + 

のでそれほど拡大:


は次の回避策を考えてみましょう "[email protected]"は常に成功します。

+0

チャールズ、私はこれが重複しているとは思わない。実際、あなたがリンクした*質問*はこの*質問に対する答えです。 – ghoti

+0

@ghoti、...他の質問のOPはすでにそれを孤立させています* findは他のものを許可していませんし、回避する方法を尋ねています。ここでのOPはまだ得られていませんが、それらに含まれる制限は同一であり、いずれの回答も両方に答えるでしょう。 –

+0

@ghoti、...与えられた、現OPの観点から考えると、他の質問が同じものだと思う人には明らかではないかもしれませんが、私たちは(サイトとして)彼らの周りを維持し、人々が潜在的に閉鎖された質問から担当者を得ることを可能にする:潜在的に解釈される問題にもかかわらず、知識の単一の標準的な情報源にガイドポストとして異なる角度/ –

関連する問題