2017-06-20 18 views
0

これはシェルスクリプト内の文です。 $ {origin}と$ {archive}は2つのディレクトリです。シェルスクリプトでcpコマンドのステータスをチェックして使用する方法は?

このコマンドは、$ {origin}フォルダ内のすべてのjpg、png、およびjpegファイルを読み込み、$ {archive}フォルダにコピーします。

find ${origin} -regex '.*\(jpg\|png\|jpeg\)' -exec cp -n {} ${archive} \; 

は、私が欲しいのはCPが正常にファイルをコピーする場合、それはいくつかのコマンドを実行します(また、ファイルは$ {}アーカイブフォルダに存在しないことを示している)ということです。

質問:

  1. は、どのように私は、CPが正常にシェルスクリプトでは、ファイルをコピーするかどうかを知ることができますか?

  2. if文はどこに置くことができますか?

答えて

3

find -execのドキュメントは言う:

コマンドを実行します。ステータスが0の場合はtrue。この文脈で

「真の」-execコマンドの結果が一致したファイルの処理が継続するかどうかを制御し、どうなるかを意味します。したがって、これを行うことができます:

find ... -exec cp -n {} ${archive} \; -exec OTHER STUFF \; 

つまり、最初にファイルをコピーしようとしています。 cpが成功すると、0を返します。findは、「このファイルを処理し続ける」という意味のtrueとして扱われます。

+0

あなたの答えをありがとう。それは私の問題を完全に解決しました。 cpコマンドがシェルスクリプト内の既存のファイルを上書きするかどうか確認できますか? –

+0

'-exec test -f $ {archive}/{} \;'のようなコマンドを使うことができます。これはファイルがすでにターゲットに存在する場合にのみ処理を続けます。チェックを逆転させるために 'test'の前に'! 'を入れてください。 –

関連する問題