it-swarm-id.com

scp tanpa mengganti file yang ada di tujuan

Bagaimana cara menyalin seluruh direktori ke direktori dengan nama yang sama tanpa mengganti konten di direktori tujuan? (sebagai gantinya, saya ingin menambah konten folder tujuan)

169
biznez

Gunakan rsync, dan lulus -u jika Anda hanya ingin memperbarui file yang lebih baru di direktori asli, atau --ignore-existing untuk melewati semua file yang sudah ada di tujuan.

rsync -au /local/directory/ Host:/remote/directory/
rsync -a --ignore-existing /local/directory/ Host:/remote/directory/

(Catat / di sisi sumber: tanpanya rsync akan membuat /remote/directory/directory.)

scp akan menimpa file jika Anda memiliki izin menulis kepada mereka.

Dengan kata lain: Anda dapat membuat scp secara efektif melewatkan file-file tersebut dengan menghapus sementara waktu hak akses tulis pada file-file tersebut (jika Anda adalah pemilik file, itu adalah).

88
Reimund

Anda hanya dapat menyalin file baru berdasarkan tanggal. Gunakan find

scp  `find /data/*.gz -type f -mtime +7` [email protected]:/backup/
12
Naks

Jika Anda dapat membuat konten file tujuan hanya-baca:

find . -type f -exec chmod a-w '{}' \;

sebelum menjalankan scp (itu akan mengeluh dan melewatkan file yang ada).

Dan mengubahnya kembali sesudahnya (chmod +w untuk mendapatkan nilai berbasis umask). Jika semua file tidak memiliki izin menulis sesuai dengan umask Anda, Anda harus menyimpan izin tersebut sehingga Anda dapat memulihkannya.

(Jawaban Gilles menimpa file yang ada jika secara lokal lebih baru, saya kehilangan data berharga seperti itu. Tidak mengerti mengapa jawaban yang salah dan berbahaya memiliki begitu banyak suara).

10
Mohad

Untuk menyalin sejumlah besar file, lebih cepat untuk menaruhnya. Dengan menggunakan -k Anda juga mencegah tar dari menimpa file saat membongkar di sistem target.

tar -c <source-dir> | ssh <name>@<Host> 'tar -kxzf - -C <target-dir>' 
7
huembi

Saya memiliki tugas yang sama, dalam kasus saya, saya tidak dapat menggunakan rsync, csync, atau Fuse karena penyimpanan saya hanya memiliki SFTP. rsync tidak dapat mengubah tanggal dan waktu untuk file tersebut, beberapa utilitas lain (seperti csync) menunjukkan kepada saya kesalahan lain: " Tidak dapat membuat file sementara Skew Jam miring terdeteksi ".

Jika Anda memiliki akses ke server penyimpanan - cukup instal openssh-server atau luncurkan rsync sebagai daemon di sini.

Dalam kasus saya - saya tidak bisa melakukan ini dan solusinya adalah: lftp . Penggunaan lftp untuk sinkronisasi adalah di bawah ini:

lftp -c "open -u login,password sftp://sft.domain.tld/; \
    mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"

/src/folder - adalah folder di PC saya, /rem/folder - adalah sftp://sft.domain.tld/rem/folder.

Anda dapat menemukan halaman manual melalui tautan: http://lftp.yar.ru/lftp-man.html

6
bolD

scp tidak menimpa file dan tidak ada saklar untuk menghentikannya, tetapi Anda dapat menyalin semuanya, melakukan scp dan kemudian menyalin kembali file yang ada. Contoh:

  1. Salin semua file yang ada

    mkdir original_files ; cp -r * original_files/
    
  2. Salin semuanya menggunakan scp

    scp -r [email protected]:dir/* ./
    
  3. Salin file asli di atas apa pun scp telah ditulis:

    cp -r original_files/* ./
    
0
A.Badger