Saya ingin cp
direktori tetapi saya tidak ingin menimpa file yang ada bahkan itu lebih tua dari file yang disalin. Dan saya ingin melakukannya sepenuhnya non-aktif karena ini akan menjadi bagian dari skrip Crontab Bash. Ada ide?
386
Jawaban:
Diambil dari halaman manual :
Contoh:
sumber
cp -n source.txt destination.txt || true
cp -n
tidak keluar dengan kesalahan jika file ada di Ubuntu 12.04.Pertimbangkan untuk menggunakan
rsync
.Per komentar
rsync -a -v src dst
tidak benar karena akan memperbarui file yang ada.sumber
--ignore-existing
tanda untuk mencegah file yang ada ditimpa.rsync -a -v --ignore-existing <src> <dst>
memang jawaban yang benar, bukan dicp -u
atas.Apa yang kamu inginkan. Lihat halaman manual.
sumber
Ini akan bekerja pada RedHat:
Memperbarui dan tidak menimpa adalah sesuatu yang berbeda.
sumber
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.
sumber
-u
tidak benar-benar sesuai dengan tujuan.Alpine linux: Jawaban di bawah ini hanya untuk kasus file tunggal: di alpine
cp -n
tidak berfungsi (danfalse | cp -i ...
juga) jadi solusi yang berfungsi dalam kasus saya yang saya temukan adalah:Dalam contoh di atas jika
env.js
berkas tidak ada maka kita copyenv.example.js
keenv.js
.sumber
Beberapa versi cp tidak memiliki opsi --no-clobber . Dalam hal itu:
sumber