Come _MOVE_ file con scp?


46

Come non copiare ma spostare i file da un server a un altro (entrambi Linux)?

man scpnon mi ha dato nulla di utile. Non posso usare 'scp' quindi 'rm' perché devo assicurarmi che il file sia stato trasferito con successo. Se si verificano errori durante il trasferimento, il file non deve essere eliminato.

Forse dovrei usare il codice di uscita in qualche modo, ma come? Inoltre, ci sono molti file e se l'ultimo file fallisce sarebbe un'opzione non molto buona per mantenere l'intero gruppo di file trasferiti con successo.

Forse c'è qualcosa oltre a SCP?

Risposte:


47

rsync over ssh è probabilmente la soluzione migliore con l' --remove-source-filesopzione

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

un rapido test dà;

[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

Come accennato da @SvenW, -e sshè l'impostazione predefinita, quindi può essere omessa.


7
-e sshè il valore predefinito implicito da molti anni, di solito non è più necessario utilizzare questo parametro.
Sven

@SvenW ah buono a sapersi! Non ho molto bisogno di rsync giorno per giorno poiché scp supporta la modalità ricorsiva per la maggior parte degli scopi.
Tom H,

Dopodiché
usalo

1
Appena aggiunto smv() { rsync -az --remove-source-files "$@"; }alla mia cassetta degli attrezzi. Grazie.
Rhys Ulerich,

E se non hai rsync? Ad esempio OpenWrt non ha rsync e devo usare scp per spostare i file. Cosa fare adesso?
valentt,

19

Usa rsyncinvece di scp:

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

Maggiori informazioni con man rsync.


17

A questa domanda è stata data una risposta soddisfacente, e la risposta è stata accettata, ma dato che è fluttuato all'inizio della prima pagina, ho pensato di provare almeno a rispondere più precisamente, se meno elegantemente. Sì, puoi usare il codice di ritorno da scpe lo faccio spesso. In bash:

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

Prendo il tuo punto su più file per copiare e gestire correttamente gli errori nello stack, quindi per più file:

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

Quest'ultimo è pratico solo se lo stai usando ssh-agent, ma spero vivamente che lo sia.


1
Penso che questa dovrebbe essere la risposta. Risponde alla domanda posta con precisione.
Travis Griggs,

Poiché SCP non gestisce la limitazione della banda (AFAIK), ho usato il tuo hanswer con rsync per spostare i file uno alla volta in una banda definita. Grazie !
Moonchild

@Moonchild, scp può effettivamente gestire i limiti di larghezza di banda usando il -lflag. Ad esempio, -l 8192per limitare i trasferimenti a 8192 kb / s
Spencer D

3

nella mia situazione, la porta ssh non è 22, quindi

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

per me va bene.


5
È molto meglio inserire numeri di porta ssh personalizzati nel file di configurazione ssh (~ / .ssh / config) piuttosto che specificarli per ogni comando. Può essere specificato a livello globale, per host o per un'espressione regolare corrispondente al nome host.
sgattaiolare il

Come impostare le porte singolarmente sia per l'origine che per la destinazione?
Brethlosze,

3

se hai un server target più vecchio come me, non puoi usarlo

--remove-source-files

ma devi usare

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

anziché.


3

Se farlo in due passaggi non è un problema, è possibile utilizzare scpper copiare il file dal server remoto, quindi eseguirlo ssh -e "rm /path/to/file"per rimuoverlo dal disco. Quando si spostano file, in particolare tra computer, le cose potrebbero andare storte, quindi può essere utile eseguire la copia e l'eliminazione separatamente e rimuovere il file solo quando si è certi che sia stato copiato per primo.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.