回答:
manページから取られた:
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
例:
cp -n myoldfile.txt mycopiedfile.txt
cp -n source.txt destination.txt || true
cp -nUbuntu 12.04にファイルが存在する場合、@ galenandrew はエラーで終了しません。
の使用を検討してくださいrsync。
rsync -a -v --ignore-existing src dst
rsync -a -v src dst既存のファイルを更新するため、コメントどおりではありません。
--ignore-existingフラグを追加して、既存のファイルが上書きされないようにします。
rsync -a -v --ignore-existing <src> <dst>代わりに、完全なコマンドが実際に正しい答えcp -uです。
これはRedHatで機能します。
false | cp -i source destination 2>/dev/null
更新ではなく上書きでは、何かが異なります。
falseここで何をしますか?
-i質問に回答します。
「n」オプションがないことに気付いた人(RedHatの私のように)cp -uは、ソースが既存のものよりも新しい場合(または既存のものがない場合)にのみファイルを書き込むために使用できます。
[編集]コメントで述べたように、これは古いファイルを上書きするため、OPが望んでいたものとは異なります。そのためにcevingの答えを使用してください。
-u実際には目的に適合しません。
Alpine linux:以下の答えは単一ファイルの場合のみです:alpineが機能してcp -nいない(そしてfalse | cp -i ...あまりにも)ので、私の場合、解決策は次のとおりです:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
上記の例では、env.jsファイルが存在しない場合はにコピーenv.example.jsしenv.jsます。