回答:
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 -n
Ubuntu 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
ます。