Come copiare tutti i file da una directory a una directory remota usando scp?

Il mio obiettivo è copiare solo tutti i file da ~ / local_dir a [email protected] / var / www / html / target_dir utilizzando scp e non creare la categoria local_dir in local_dir.

/var/www/html/target_dir/files.. 

ma non

/var/www/html/target_dir/local_dir/files.. quando si utilizza il parametro -r

Commenti

Risposta

scp ha largomento -r. Quindi, prova a utilizzare:

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

Largomento -r funziona proprio come largomento -r in cp, trasferirà lintera cartella e tutti i file e le sottodirectory allinterno.

Commenti

  • Il tuo comando ha creato la directory local_dir in / var / www / html / target_dir il mio obiettivo è copiare solo i file.
  • Mi spiace, ho sbagliato. Quindi ripeti semplicemente il comando, ma in questo modo: $ scp -r ~/local_dir [email protected]:/var/www/html/ Quindi rinomina la nuova directory se necessario.
  • Oppure $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Qualunque galleggia sulla tua barca.
  • Cambia il carattere jolly * in un punto . e tu ' copierò il contenuto della directory (inclusi eventuali file punto) senza copiare la directory stessa. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Sfortunatamente, lutilizzo di . è stato interrotto da un scp " bugfix " (vedi < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync sarebbe unalternativa funzionante.

Risposta

Se il tuo obiettivo è trasferire tutti i file dal local_dir il carattere jolly * funziona:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

Lopzione -r significa “ricorsivamente”, quindi devi scriverla quando “provi a trasferire unintera directory o più directory.

Da man scp:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

Quindi, se hai sottodirectory allinterno di local_dir, lultimo esempio trasferirà solo file, ma se imposti lopzione -r, trasferirà file e directory.

Commenti

  • 1+ Perché devi leggere i commenti nella risposta accettata per arrivare alla risposta corretta, mentre questa la spiega direttamente.

Risposta

Aggiunta di /. a la tua directory di origine trasferirà i suoi contenuti invece della directory stessa. A differenza della soluzione con caratteri jolly, questa includerà anche tutti i file nascosti.

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

Il merito di questa soluzione va a roaima, ma ho pensato che dovrebbe essere pubblicato come una risposta effettiva, non solo un commento.

Commenti

Risposta

Procedi nel seguente modo:

  1. Copia directory local_dir con tutte le sue sottodirectory:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. copia solo il contenuto di local_dir e non la directory local_dir stessa:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Non utilizzare: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir come genera un errore (appena testato e ha ricevuto il seguente errore):

    scp: error: unexpected filename: . 

Commenti

  • Ricevo anche lerrore di nome file imprevisto. Tuttavia, lutilizzo del carattere jolly non funziona perché la directory ha così tanti file che supera il limite di caratteri per i comandi quando il carattere jolly viene espanso. macOS
  • @RichardKiefer: puoi usare caratteri jolly come? con * per isolare ulteriormente i risultati della ricerca e poi passarli a scp. Prova questo link, potrebbe essere daiuto: Caratteri jolly
  • Grazie Syed, ma il punto era che in realtà desidero scegliere come target tutti gli elementi nella cartella e non filtrarne alcuno. E se la mia directory ne ha troppe, il carattere jolly non funzionerà.
  • @RichardKiefer: Mi scuso Richard, per far copiare tutti i file possiamo usare un piccolo script bash. Usa: ls -l | awk '{print $9}' e reindirizza tutto loutput (che sarebbero tutti i nomi dei file) in un file txt. Leggi il file txt, una riga alla volta e usa quellinput con scp per copiare i file: input=/home/user/filename.txt while IFS= read -r line

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *