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 -n
tidak 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 dst
tidak benar karena akan memperbarui file yang ada.
--ignore-existing
tanda untuk mencegah file yang ada ditimpa.
rsync -a -v --ignore-existing <src> <dst>
memang jawaban yang benar, bukan di cp -u
atas.
Ini akan bekerja pada RedHat:
false | cp -i source destination 2>/dev/null
Memperbarui dan tidak menimpa adalah sesuatu yang berbeda.
false
dilakukan di sini?
-i
pertanyaan.
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.
-u
tidak benar-benar sesuai dengan tujuan.
Alpine linux: Jawaban di bawah ini hanya untuk kasus file tunggal: di alpine cp -n
tidak 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.js
berkas tidak ada maka kita copy env.example.js
ke env.js
.
Beberapa versi cp tidak memiliki opsi --no-clobber . Dalam hal itu:
echo n | cp -vipr src/* dst