Jawaban:
Diambil dari halaman manual :
-n, --no-clobber
do not overwrite an existing file (overrides a previous -i option)
Contoh:
cp -n myoldfile.txt mycopiedfile.txt
cp -n source.txt destination.txt || true
cp -ntidak keluar dengan kesalahan jika file ada di Ubuntu 12.04.
Pertimbangkan untuk menggunakan rsync.
rsync -a -v --ignore-existing src dst
Per komentar rsync -a -v src dsttidak benar karena akan memperbarui file yang ada.
--ignore-existingtanda untuk mencegah file yang ada ditimpa.
rsync -a -v --ignore-existing <src> <dst>memang jawaban yang benar, bukan di cp -uatas.
Ini akan bekerja pada RedHat:
false | cp -i source destination 2>/dev/null
Memperbarui dan tidak menimpa adalah sesuatu yang berbeda.
falsedilakukan di sini?
-ipertanyaan.
Untuk orang yang menemukan bahwa tidak memiliki opsi 'n' (seperti saya di RedHat) dapat Anda gunakan cp -u hanya menulis file jika sumbernya lebih baru dari yang ada (atau tidak ada yang ada).
Seperti yang disebutkan dalam komentar, ini akan menimpa file yang lebih lama, jadi bukan yang diinginkan OP. Gunakan jawaban ceving untuk itu.
-utidak benar-benar sesuai dengan tujuan.
Alpine linux: Jawaban di bawah ini hanya untuk kasus file tunggal: di alpine cp -ntidak berfungsi (dan false | cp -i ...juga) jadi solusi yang berfungsi dalam kasus saya yang saya temukan adalah:
if [ ! -f env.js ]; then cp env.example.js env.js; fi
Dalam contoh di atas jika env.jsberkas tidak ada maka kita copy env.example.jske env.js.
Beberapa versi cp tidak memiliki opsi --no-clobber . Dalam hal itu:
echo n | cp -vipr src/* dst