Mac OS Xを使用しています。このようなビルドスクリプトのcpコマンドでいくつかのファイルをコピーしようとしています。
cp ./src/*/*.h ./aaa
ただし、。/ srcディレクトリに.hファイルがない場合、このコマンドはエラーを発生させます。コマンドでエラーが発生しないようにするにはどうすればよいですか? (サイレントエラー)このエラーによりビルド結果が失敗しますが、ヘッダーファイルがいくつかある場合にのみコピーしたいです。
エラーメッセージについて話している場合、それをビットバケットに送信することで抑制できます。
cp ./src/*/*.h ./aaa 2>/dev/null
終了コードとエラーメッセージを抑制したい場合:
cp ./src/*/*.h ./aaa 2>/dev/null || :
あなたはの線に沿って何かを探しています
if [ -e file ]
then cp file /somewhere
fi
(残念ながら、-f
オプションは、探しているドロイドではありません。)
グロブと一致させたい場合は、機能しません。代わりにfind
を使用してください。例:
find ./src -name \*.h -exec cp {} ./destination \;
古い質問ですが、それでも他の人には関係があるかもしれません。
needを使用せずにcpを使用する場合は、rsyncで試すことができます。
すべてのファイルをソースから宛先ディレクトリにコピーするには、次を実行:
rsync -avzh --ignore-errors /path/to/source /path/to/destination
Rsyncには、Linux、Mac OS X、FreeBSDなど、ほとんどのUnixライクなシステムが付属しています。
結果をtrueにパイプすると、コマンドが常に成功することが保証されます。私はこれをLinuxで試しましたが、どのMac OSでも試していません。
cp ./src/*/*.h ./aaa | true
正しいエラーステータスを強制できます。関数付き:
$ cpalways () { cp $1 $2 2>/dev/null ; return 0 ; }
次の場合:
$ ls foo bar baz
ls: baz: No such file or directory
bar foo
通常のコピーはエラーを返します。終了ステータス1を返します。
$ cp baz bar ; echo $?
cp: baz: No such file or directory
1
上記のcpalways()関数を使用すると、エラーは非表示になります。
$ cpalways baz bar ; echo $?
0
$ cpalways foo bar ; echo $?
0
$ cpalways baz bar ; echo $?
0