Yanıtlar:
Bunun için kullanabilirsiniz rsync
. rsync
Bu tür bir işlem için gerçekten tasarlanmıştır.
Sözdizimi:
rsync -avh /source/path/ host:/destination/path
veya
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
İlk çalıştırdığınızda tüm içeriği kopyalar, sonra sadece yeni dosyaları kopyalar.
Trafiği bir SSH bağlantısı (örneğin, gizlilik amaçları için) yoluyla, başlangıçta bir SCP tabanlı çözüm istediğinizi belirttiğiniz gibi tünellemeniz gerekiyorsa, sadece -e ssh
parametreleri ekleyin rsync
. Örneğin:
rsync -avh -e ssh /source/path/ host:/destination/path
rsync -t *.c foo:src/
-> "Bu desen * makine foo dizin src dizinine gelen .c ile eşleşen tüm dosyaları olacaktır. Dosyalardan herhangi biri zaten o uzak sistemde rsync Remote- üzerinde varsa güncelleme protokolü dosyayı yalnızca farkları göndererek güncellemek için kullanılır "
rsync -avuzh /source/path/ host:/destination/path
. Bu, tüm işi tek bir komutta yapar ve sonraki çağrılarda, yalnızca ihtiyacı olan dosyaları aktarır.
Herhangi bir nedenden dolayı scp'ye bağlı kalmak istiyorsanız , yerel verilerinizdeki w izinlerini kaldırabilirsiniz (bunu yapma hakkınız varsa) ve scp dokunmaz. Daha kesin olmak gerekirse:
chmod a-w local/*.tar.gz
(yerel direktörünüzde)scp remote/*.tar.gz local
Bu çok verimli değil, hoş ama scp'den başka bir şeye değiştirmeden hızlı bir geçici çözüme ihtiyacınız varsa yardımcı olabilir. (Kudos: Hedefdeki mevcut dosyaları değiştirmeden scp )
SCP ile bunun nasıl yapılacağına dair kesin bir cevap yoktu, çünkü asıl sorunun sorduğu şey buydu.
sudo find /files/ -type f -exec chmod a-w {} \;
scp -r username@server.com:/file/location/* /files
Dosyaları kopyalamayı tamamladığınızda izinleri geri değiştirin:
sudo chmod a+w -R /files
--ignore-existing
gerçekten gerekli?