Hedef dizindeki içeriği değiştirmeden tüm dizinin tamamını aynı isimdeki bir dizine nasıl kopyalarım? (bunun yerine, hedef klasörün içeriğine eklemek istiyorum)
Hedef dizindeki içeriği değiştirmeden tüm dizinin tamamını aynı isimdeki bir dizine nasıl kopyalarım? (bunun yerine, hedef klasörün içeriğine eklemek istiyorum)
Yanıtlar:
Kullanım rsyncve pas -uyalnızca orijinal dizinde yeni olan dosyaları güncellemek istiyorsanız, ya --ignore-existingzaten hedefte var tüm dosyaları atlamak için.
rsync -au /local/directory/ host:/remote/directory/
rsync -a --ignore-existing /local/directory/ host:/remote/directory/
(Not /kaynak tarafında: Bu olmadan rsyncyaratacak /remote/directory/directory.)
--ignore-existingdeğiştirmeden ekleme yapar, hangi veri kaybını görüyorsunuz?
rsynckolayca erişilebilir değilse, bu yardımcı olmaz .... (Win32-OpenSSH gibi)
--rsync-pathgerekli olduğu diğer örnektir )
Yazma izniniz varsa, scp dosyaların üzerine yazacaktır.
Başka bir deyişle: Üzerindeki scpyazma izinlerini geçici olarak kaldırarak söz konusu dosyaları etkili bir şekilde atlayabilirsiniz (eğer dosya sahibiyseniz).
scp -r user@server.com:/location/of/files/* /local/location/
Yalnızca yeni dosyaları tarihe göre kopyalayabilirsiniz. kullanımfind
scp `find /data/*.gz -type f -mtime +7` USER@SERVER:/backup/
Hedef dosya içeriğini salt okunur hale getirebilirseniz:
find . -type f -exec chmod a-w '{}' \;
çalıştırmadan önce scp(şikayet eder ve mevcut dosyaları atlar).
Ve daha sonra bunları değiştirin ( chmod +wumask tabanlı bir değer elde etmek için). Eğer dosyalarınızın tümü umaskınıza göre yazma iznine sahip değilse, bir şekilde izinleri saklayabilmeniz için onları geri yükleyebilmeniz gerekir.
(Gilles'un cevabı, eğer yerel olarak daha yeniyse, varolan dosyaların üzerine yazar, bu şekilde değerli verilerimi kaybettim. Yanlış ve zararlı cevabın neden bu kadar çok oyu olduğunu anlamıyorum).
rsync --ignore-existingverileri kaybetmek neden?
find: missing argument to '-exec'bu komutu kullanarak ve bunun yerine kullanmak zorunda kaldı: find . -type f -exec chmod a-w {} \;. Linux'um kötü, ymmv.
find . -type f -exec chmod a-w {} \;
Depolamamda yalnızca SFTP olduğundan rsync, benim durumumda kullanamadığım csyncveya FUSE ile benzer bir görevim vardı . rsyncdosyanın tarihini ve saatini değiştiremedi, diğer bazı yardımcı programlar (gibi csync) bana başka hatalar gösterdi: " Saat eğriliği algılandı geçici dosya oluşturulamıyor ".
Depolama sunucusuna erişiminiz varsa - buraya bir daemon olarak kurun openssh-serverveya başlatın rsync.
Benim durumumda - bunu yapamam ve çözüm oldu: lftp . lftpsenkronizasyon için kullanımı aşağıdadır:
lftp -c "open -u login,password sftp://sft.domain.tld/; \
mirror -c --verbose=9 -e -R -L /srs/folder /rem/folder"
/src/folder- bilgisayarımdaki klasör, /rem/folder- sftp://sft.domain.tld/rem/folder.
Man sayfalarını linkten bulabilirsiniz: http://lftp.yar.ru/lftp-man.html
Bir sürü dosyayı kopyalamak için, onları taramak daha hızlı olur. -K kullanarak, hedef sistemde paketten çıkarırken katranların üzerine yazılmasını da önlersiniz.
tar -c <source-dir> | ssh <name>@<host> 'tar -kxzf - -C <target-dir>'
scpdosyaların üzerine yazar ve bunu yapmayı durduracak bir anahtar yoktur, ancak işleri bir şekilde kopyalayabilir, scp'yi yapabilir ve ardından mevcut dosyaları geri kopyalayabilirsiniz. Örnekler:
Mevcut tüm dosyaları kopyalayın
mkdir original_files ; cp -r * original_files/
Her şeyi scp kullanarak kopyalayın
scp -r user@server:dir/* ./
Orijinal dosyaları, scp'nin üzerine yazdığı herhangi bir şeyin üzerine kopyalayın:
cp -r original_files/* ./
Bunu başarmanın başka bir yolu lsda hedef klasörde yapmaktır :
Uzak hedef klasörde:
ls | awk '{print "mv " $1 " ../copied_data/"}' > mv_copied_data
scp mv_copied_data user@source.server.com:/path/to/source/folder
Kaynakta:
cd /path/to/source/folder
chmod 777 mv_copied_data
./mv_copied_data
Hedefte:
scp -r user@source.server.com:/path/to/source/folder /path/to/destination/foldeer
- >boşluk yeni satır veya başka özel karakterler içeriyorsa, cevap tehlikelidir . 3. Bir python betiğinde bir for-loop kodlayın. Çalışma zamanında bir program oluşturmak, birçok nedenden dolayı zor ve zordur (profesyonel programcılar tarafından yapıldığında bile). Bir kabuk betiği oluşturmak bile daha kötü - korkunç bir fikir.