Bagaimana cara menyalin hanya file baru menggunakan perintah "scp"?


24

Saya menyalin ratusan file ke komputer lain menggunakan scpperintah yang saya dapatkan stalled kesalahannya . Sekarang saya akan menyalin file lagi. Apakah ada cara untuk menghindari menyalin file yang sudah disalin?

Jawaban:


40

Anda bisa menggunakannya rsyncuntuk itu. rsyncbenar-benar dirancang untuk jenis operasi ini.

Sintaksis:

rsync -avh /source/path/ host:/destination/path

atau

rsync -a --ignore-existing /local/directory/ host:/remote/directory/

Ketika Anda menjalankannya pertama kali akan menyalin semua konten kemudian hanya akan menyalin file baru.

Jika Anda perlu menyalurkan lalu lintas melalui koneksi SSH (misalnya, untuk tujuan kerahasiaan), seperti yang ditunjukkan oleh Anda pada awalnya meminta solusi berbasis SCP, cukup tambahkan -e sshke parameter rsync. Sebagai contoh:

rsync -avh -e ssh /source/path/ host:/destination/path

Apakah --ignore-existingbenar-benar dibutuhkan?
Meysam

Karena dalam contoh manual ini: rsync -t *.c foo:src/ -> "Ini akan mentransfer semua file yang cocok dengan pola * .c dari direktori saat ini ke direktori src pada mesin foo. Jika ada file yang sudah ada pada sistem remote maka rsync remote- protokol pembaruan digunakan untuk memperbarui file dengan hanya mengirim perbedaan "
Meysam

1
Saya biasanya menggunakan rsync -avuzh /source/path/ host:/destination/path. Itu melakukan seluruh pekerjaan dalam satu perintah, dan pada pemanggilan berikutnya, hanya mentransfer file yang membutuhkannya.
Edward Falk

6

Jika Anda ingin tetap dengan scp untuk alasan apapun, Anda mungkin menghapus w hak akses pada data lokal Anda (jika Anda memiliki hak untuk melakukannya) dan scp tidak akan menyentuhnya. Lebih tepatnya:

  1. chmod a-w local/*.tar.gz (dalam direktori lokal Anda)
  2. scp remote/*.tar.gz local

Ini tidak terlalu efisien, baik tetapi mungkin membantu jika Anda memerlukan solusi sementara cepat tanpa mengubah ke sesuatu yang lain daripada scp. (Kudos: scp tanpa mengganti file yang ada di tujuan )


Saya sangat suka solusi ini. Saya mengumpulkan file dari sensor jarak jauh ke dalam arsip. Seluruh direktori yang berfungsi - masing-masing memiliki subdirektori Arsip. Setelah file masuk ke Archive mereka tidak akan pernah berubah. Akan sangat mudah untuk menandai file yang diarsipkan sebagai -w jadi ini yang akan saya lakukan. Dan file yang berfungsi di luar direktori arsip dapat dibiarkan apa adanya - jadi jika saya menjalankan program pembaruan di siang hari, masih akan menyalin file yang sedang dalam proses. Inilah tepatnya yang saya cari. Banyak tnx!
SDsolar

4

Tidak ada jawaban pasti tentang bagaimana melakukan ini dengan SCP, karena itu adalah pertanyaan awal yang diajukan.

sudo find /files/ -type f -exec chmod a-w {} \;

scp -r username@server.com:/file/location/* /files

Setelah selesai menyalin file, ubah kembali izin:

sudo chmod a+w -R /files


1
Yah, bisa dibilang, pertanyaan aslinya adalah "bagaimana saya bisa menyelesaikan masalah ini", yang jawabannya adalah rsync.
Edward Falk
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.