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 rsync
ve pas -u
yalnızca orijinal dizinde yeni olan dosyaları güncellemek istiyorsanız, ya --ignore-existing
zaten 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 rsync
yaratacak /remote/directory/directory
.)
--ignore-existing
değiştirmeden ekleme yapar, hangi veri kaybını görüyorsunuz?
rsync
kolayca erişilebilir değilse, bu yardımcı olmaz .... (Win32-OpenSSH gibi)
--rsync-path
gerekli olduğu diğer örnektir )
Yazma izniniz varsa, scp dosyaların üzerine yazacaktır.
Başka bir deyişle: Üzerindeki scp
yazma 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 +w
umask 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-existing
verileri 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 csync
veya FUSE ile benzer bir görevim vardı . rsync
dosyanı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-server
veya başlatın rsync
.
Benim durumumda - bunu yapamam ve çözüm oldu: lftp . lftp
senkronizasyon 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>'
scp
dosyaları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 ls
da 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.