Nasıl _MOVE_ dosyaları scp ile?


46

Dosyaları kopyalamak değil, bir sunucudan diğerine (her ikisi de Linux) nasıl taşıyabilirim?

man scpbana faydalı bir şey vermedi. 'Scp' sonra 'rm' kullanamıyorum çünkü dosyanın başarıyla aktarıldığından emin olmalıyım. Aktarım sırasında herhangi bir hata varsa, dosya silinmemelidir.

Belki bir şekilde çıkış kodunu kullanmalıyım, ama nasıl? Ayrıca, çok fazla dosya var ve son dosya başarısız olursa o kadar iyi bir seçenek olmazdı ki başarılı bir şekilde aktarılan dosyaların tümünü saklayın.

Belki SCP'den başka bir şey vardır?

Yanıtlar:


47

ssh üzerinden rsync, seçenekle muhtemelen en iyi --remove-source-filesseçeneğiniz

rsync -avz --remove-source-files -e ssh /this/dir remoteuser@remotehost:/remote/dir 

hızlı bir test verir;

[tomh@workstation001 ~]$ mkdir test1
[tomh@workstation001 ~]$ mkdir test2
[tomh@workstation001 ~]$ touch test1/testfile.1
[tomh@workstation001 ~]$ ls test1/
testfile.1
[tomh@workstation001 ~]$ rsync --remove-source-files -av -e ssh test1/testfile.1 tomh@localhost:/home/tomh/test2/
sending incremental file list

sent 58 bytes  received 12 bytes  10.77 bytes/sec
total size is 0  speedup is 0.00

[tomh@workstation001 ~]$ ls test1/
[tomh@workstation001 ~]$
[tomh@workstation001 ~]$ ls test2/
testfile.1

@SvenW'nin dediği gibi -e ssh, varsayılan ayardır, bu nedenle ihmal edilebilir.


7
-e sshuzun yıllar boyunca örtük varsayılandır, artık bu parametreyi kullanmaya gerek kalmaz.
Sven

@SvenW ah bilmek güzel! Scp çoğu durumda özyinelemeli modu desteklediği için günden güne rsync'e ihtiyacım yok.
Tom H

Bundan sonra boş klasörleri temizlemek için bunu kullanın (rsync onları kaldırmaz): serverfault.com/a/95935/58568
bmaupin

1
Sadece smv() { rsync -az --remove-source-files "$@"; }araç kutuma ekledim . Teşekkür ederim.
Rhys Ulerich

Ya rsync'niz yoksa? Örneğin, OpenWrt rsync'e sahip değil ve dosyaları taşımak için scp kullanmam gerekiyor. Şimdi ne yapmalı?
valentt

19

Yerine rsynckullanın scp:

rsync -avz --remove-source-files /sourcedir user@host:/targetdir 

İle daha fazla bilgi man rsync.


17

Bu sorunun cevabı çok iyi cevaplandı ve cevap kabul edildi, ancak ön sayfanın en üstünde yer aldığından, en azından daha az zarif bir şekilde daha kesin olarak cevap vermeye çalışacağımı düşündüm. Evet, dönüş kodunu kullanarak kullanabilirsiniz, scpsık sık yaparım. İçinde bash:

scp foo user@server:/destination && rm foo

Yığını doğru şekilde aşağı doğru kopyalamak ve işlemek için birden fazla dosyaya dikkatinizi çekiyorum, bu nedenle birden fazla dosya için:

for file in bar*; do scp "$file" user@server:/destination && rm "$file" ; done

Bu son, yalnızca kullanıyorsanız kullanışlıdır ssh-agent, ancak umarız ki kullanıyorsunuzdur .


1
Bunun cevap olması gerektiğini düşünüyorum. Tam olarak sorulan soruyu yanıtlıyor.
Travis Griggs

SCP (AFAIK) bant genişliği sınırlamasıyla ilgilenmediğinden, hanswer'ınızı rsync ile tanımlanmış bir bant genişliğinde dosyaları birer birer taşımak için kullandım. Teşekkürler !
Moonchild

@ Moonchild, scp aslında -lbayrak kullanarak bant genişliği sınırlarını kaldırabilir . Örneğin, -l 81928192 kb / s'de transferleri sınırlamak için
Spencer D

3

benim durumumda, ssh portu 22 değil

rsync -avz --remove-source-files -e "ssh -p $portNumber" user@remoteip:/path/to/files/ /local/path/

benim için çalışıyor.


5
Özel ssh port numaralarını ssh config dosyasına (~ / .ssh / config) koymakla, her komut için belirtmekten çok daha iyidir. Genel olarak, ana bilgisayar başına veya ana bilgisayar adıyla eşleşen normal ifade için belirtilebilir.
gizlice

Portlar hem kaynak hem de varış yeri için ayrı ayrı nasıl ayarlanır?
Brethlosze

3

benim kadar eski bir hedef sunucunuz varsa, kullanamazsınız

--remove-source-files

ama kullanmak zorundasın

--remove-sent-files --protocol=29

yerine.


3

İki adımda yapmak sorun değilse scp, dosyayı uzak sunucudan kopyalamak için kullanabilir ve ardından ssh -e "rm /path/to/file"diskten kaldırmak için kullanabilirsiniz. Dosyaları özellikle makineler arasında taşırken işler ters gidebilir, bu nedenle kopya ve silmeyi ayrı ayrı yapmak iyi olabilir ve yalnızca ilk önce başarıyla kopyalandığından emin olduğunuzda dosyayı kaldırın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.