回答:
エラーメッセージについて話している場合は、ビットバケットに送信することでそれを抑制することができます。
cp ./src/*/*.h ./aaa 2>/dev/null
終了コードとエラーメッセージを抑制したい場合:
cp ./src/*/*.h ./aaa 2>/dev/null || :
cp
(必要な場合)の終了コードを抑制するために使用されます。true
代わりにシェルビルトインを使用でき、読みやすくなります。
cp
理由でPATH
...)
あなたはの線に沿って何かを探しています
if [ -e file ]
then cp file /somewhere
fi
(残念ながら、この-f
オプションは探しているドロイドではありません。)
グロブを一致させたい場合、それは機能しません。find
代わりに使用します。例:
find ./src -name \*.h -exec cp {} ./destination \;
set -e
、呼び出し[
とcp
呼び出しの間にファイルが消えると、スクリプトがクラッシュします)。
古い質問ですが、他の人にも関連があるかもしれません。cpを使用する必要
がない場合は、rsyncを試してください。
すべてのファイルをソースから宛先ディレクトリにコピーするには、次を実行します。
rsync -avzh --ignore-errors /path/to/source /path/to/destination
Rsyncは、Linux、Mac OS X、FreeBSDなど、ほとんどのUnixライクなシステムに付属しています。
--ignore-missing-args
。rsync -av --ignore-missing-args ./src/*/*.h ./aaa
これには、--ignore-errors
無視されるエラーが存在しないソースファイルに関連するエラーのみであるという利点があります。では--ignore-errors
、すべてのエラーは無視され、危険なことかもしれません。また、このパラメーターはかなり新しいため、古いバージョンのrsyncには存在しない可能性があることを考慮してください。
強制的に正しいエラー状態にすることができます。機能付き:
$ 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
:
この文脈で何を意味するのかを説明しておくといいでしょう。