cp -a foo/* bar/
fooの内容はbarにコピーされ、既存のファイルを置き換えます。 -nフラグを使用して、cp
既存のファイルを上書きしないか、-i
ファイルを上書きするかどうかを対話的に要求することができます。
質問
cp
ファイルがすでに存在する場合は失敗し、エラーコードを返す方法はありますか?rsync
それ以外の場合に使用できる他の一般的なツールはありますか?
答え1
Linux
ファイルがLinuxに存在する場合、GNUによるわずかな変更が失敗する可能性がありますnohup
。にnohup
リダイレクトすると、すべての対話型プロンプトは無視されますが、使用は失敗として扱われます。/dev/null
stdin
stdin
$ nohup cp -ia foo/* bar/
掃除する:
$ nohup cp -ia foo/* bar/ 2>nohup.out && rm nohup.out || cat nohup.out
- デフォルトでおよびに
nohup
リダイレクトされます。stdout
nohup.out
stderr
stdout
2>nohup.out
stderr
ファイルにも入れてみてください。&& rm || cat
成功するとクリアされ、エラーnohup.out
が発生するとエラーを出力します。必要なエラー処理を追加/含めるか、すべて削除してcat
正常に処理できます。$?
- 真剣に使用するには、一時ファイルの場所についてよりよく知っておく必要があります(
mktemp -d
)。
BSD
BSDでは、ゼロ以外の状態が処理され、返される場所stdin
にリダイレクトできます。cp
n
$ cp -ia foo/* bar/ </dev/null
OSX
驚くべきことに、OSXの動作はBSDとは異なり、スキップされたcp
ファイルに対してゼロ以外の状態を返します。-n
$ cp -n foo/* bar/