Usando sftp per trasferire una directory?


50

Quando provo ad usare sftp per trasferire una directory contenente file, ricevo un messaggio di errore:

skipping non-regular file directory_name

La directory contiene un paio di file e due sottodirectory.

Che cosa sto facendo di sbagliato?

Risposte:


49

sftp, come cpe scp, richiede che quando copi una cartella (e il suo contenuto, ovviamente), devi dirlo esplicitamente che vuoi trasferire la cartella in modo ricorsivo con l' -ropzione.

Quindi, aggiungi -ral comando.


2
-r dopo il comando put? Sto ricevendo un messaggio di errore "put: Invalid flag -r" se lo faccio. L'aggiunta al comando sftp originale non funziona.
Haziz,

5
Aggiungi -ral sftpcomando quando ti connetti. sftp -r user@host
Kevin,

1
@Kevin Ricevo il seguente errore "sftp: opzione sconosciuta --r"
Amatya

2
Attenzione che c'è un bug piuttosto lungo in piedi in SFTP di OpenSSH: quando si copia ricorsivamente una directory a un server remoto, la directory stessa deve già esistere sul server di destinazione in caso contrario il trasferimento fallirà con un messaggio di errore non esplicito: Couldn't canonicalise: No such file or directory.
WhiteWinterWolf

5
dovrebbe essere qualcosa del tipo:# sftp user@remote-host #> get -r remote-folder
hbinduni

21

Posso solo suggerire, tu usi rsync. È in qualche modo uno standard industriale, quando si spostano file su connessioni sicure.

rsync -alPvz ./source_dir server.com:destination_dir

È quello che uso da anni ormai.

(l' -aopzione si occupa di cose come la ricorsione della directory)


3
Un po 'di chiarimento sui parametri citati: -a= ricorsione + mantenere collegamenti simbolici, permessi, tempi di modifica, proprietario, gruppo, file speciali e file del dispositivo (quest'ultimo richiede privilegi di superutente); -l= conserva collegamenti simbolici (già inclusi in -a); -P= mostra l'avanzamento durante il trasferimento + conserva i file parzialmente trasferiti; -v= modalità dettagliata (tuttavia sembra obbligatorio quando si utilizza -Pper evitare un errore strano (bug?) protocol version mismatch); -z= abilita la compressione dei dati trasferiti.
WhiteWinterWolf

@WhiteWinterWolf sembra essere dipendente dalla versione se lo -lswitch deve essere utilizzato o meno. Mi ricordo le versioni precedenti non hanno incluso -lin -a.
Polemone

5

Potresti anche essere in grado di utilizzare l'uso scp. Il formato generale è

scp -rp sourceDirName username@server:destDirName

scpsignifica "copia protetta". Le bandiere sono

  • -r ricorrere in sottodirectory
  • -p preservare i tempi di modifica

Credo che il resto degli articoli sia autoesplicativo


e scp -rp -P <porta> .... quando si utilizza una porta non standard
Pancho

4

Questo funziona per me:

1) connettersi tramite sftphost remoto

2) passare alla directory remota che si desidera copiare. (Esempio: cd Music)

3) passare alla directory locale in cui si desidera copiare materiale. (Esempio: Desktop LCD)

4) Emettere questo comando: get -r *


4

Se rsyncnon è un'opzione, vorrei quindi raccomandare lftp:

lftp sftp://user@host.com/path/path/

Quindi utilizzare il mirrorcomando per caricare ricorsivamente, in questo modo:

mirror -R

(Si noti che la ricorsione è l'impostazione predefinita. -RÈ per il contrario : per caricare il comando mirror anziché il download. Provare ad aggiungere --dry-runper fare una prova per assicurarsi che stia facendo ciò che ci si aspetta.)

O per caricare senza ricorsione:

mirror --no-recursion

Devi cdentrare nelle directory che vuoi rispecchiare. Funziona alla grande!


2

Se puoi, usa sshfs . È un filesystem FUSE , disponibile sulla maggior parte dei moderni unices e funziona con qualsiasi server SFTP. Questo è un filesystem remoto: ti permette di manipolare i file remoti (tramite il protocollo SFTP) con le solite utility.

mkdir /mount/point
sshfs server.example.com:/remote/path /mount/point
ls /mount/point
cp -Rp /mount/point/somedir /local/location
fusemount -d /mount/point

0

È un po 'difficile ma quello che funziona per me è:

  1. Utilizzare sshper accedere al computer remoto
  2. Utilizzare sftpdal computer remoto al computer locale
  3. Quindi utilizzare il getcomando con l' -ropzione per spostare la directory e tutti i suoi file.

1
non lavorare con -rsftp> get -r data /opt/bin get: Invalid flag -r
Skynet

0

Se la tua domanda è in realtà "come posso usare sftp per trasferire una directory", allora

 sftp -r user@server

Ma se trasferisci una directory, potrei suggerire due opzioni migliori, a seconda delle tue esigenze. sftprichiede l'accesso al server remoto in un prompt dei comandi simile a ssh, ma se tutto ciò che desideri sono i file, ci sono modi più facili e veloci.

Scp

Per un trasferimento una tantum, per caricare provare:

 # upload source directory to remote server
 scp -rp source_dir user@server:dest

 #download directory from remote server:
 scp -rp user@server:source_dir dest

 #specifying ssh key:
 scp -rp -i ~/.ssh/key user@server:source_dir dest

 #remote directory has spaces
 scp -rp -i ~/.ssh/key user@server:"source\\ dir" dest

rsync

Se hai intenzione di sincronizzare le directory su base regolare, l'uso di rsync ha più senso. Esegue delta tra le due directory, risparmiando tempo e dati di trasferimento via cavo.

rsync -r -a -v -e ssh --delete source_dir user@server:dest

Ecco un elenco di alcune delle opzioni rsync più comuni: ( presa da qui )

  • --delete - elimina i file che non esistono sul mittente (sistema)
  • -v - verbose (-vv fornirà informazioni più dettagliate)
  • -e "opzioni ssh" - specifica ssh come shell remota
  • -a - modalità archivio - conserva permessi (proprietari, gruppi), orari, collegamenti simbolici e dispositivi
  • -r: ricorre nelle directory
  • -z - comprime i dati del file durante il trasferimento
  • --exclude 'foldername' - esclude la cartella corrispondente dal trasferimento
  • -P - mostra l'avanzamento durante il trasferimento

Spero che aiuti!


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.