Saya perlu menyalin folder / home / pengguna dari satu hard disk ke yang lain. Ini memiliki 100.000 file dan ukuran sekitar 10G.
saya menggunakan
cp -r /origin /destination
terkadang saya mendapatkan beberapa kesalahan karena tautan yang rusak, izin dan sebagainya. Jadi saya memperbaiki kesalahan, dan perlu memulai lagi salinannya.
Saya bertanya-tanya bagaimana saya bisa memberi tahu perintah "cp", setelah mencoba menyalin lagi, tidak menyalin file lagi jika ada di folder tujuan.
Jawaban:
cp -R -u -p /source /destination
The
-u
( atau--update
) flag tidak hanya ini:Dari halaman manual untuk cp:
sumber
yes n | cp -i /source/* /destination 2>/dev/null
Gunakan saja
cp -n <source> <dest>
.Dari halaman manual :
sumber
rsync -aq /src /dest
Selain hanya menyalin file yang lebih baru, bahkan hanya akan menyalin bagian file yang lebih baru jika file telah berubah. Ini dimaksudkan untuk menyalin melalui tautan jaringan di mana Anda ingin meminimalkan jumlah data - tetapi juga berfungsi dengan baik secara lokal.
sumber
Cari opsi "-u" untuk
cp
perintah.sumber
Semua jawaban di atas benar tetapi jika Anda melakukan ini secara rekursif maka
kamu seharusnya melakukan:
sumber
Anda harus menyalin sebagai root untuk mempertahankan izin / kepemilikan
Lihat juga rsync
sumber
Solusi POSIX
Jawaban lain menggunakan
-u
atau-n
opsi daricp
. Tidak satu pun dari ini diperlukan oleh POSIX ; juga bukanrsync
dari jawaban lain; juga tidakyes
digunakan dalam salah satu komentar.Masih kita bisa mereproduksi
yes n
denganwhile
loop. Ini mengarah ke solusi POSIX berikut:sumber
Menggunakan
cp -rn <sourcedirname>/. <destdirname>
Saklar r membuat salinan menjadi rekursif di atas direktori.
N switch (versi lama tanpa clobber) memastikan file yang ada tidak pernah ditulis berlebihan.
The '
/.
' setelah sourcedirname memastikan bahwa itu tidak menjadi subdirektori di bawah destdirname alih-alih semua konten dari yang sebelumnya disalin ke yang terakhir.sumber