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 unscp
" 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
- Sfortunatamente, questa soluzione è stata violata da un " bugfix " (vedi < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Risposta
Procedi nel seguente modo:
-
Copia directory
local_dir
con tutte le sue sottodirectory:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
copia solo il contenuto di
local_dir
e non la directorylocal_dir
stessa:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
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
scp * [email protected]:/var/www/html/target_dir
non fa quello che vuoi? In tal caso, modifica con maggiori dettagli su ciò che ' stai cercando di fare & ho provato finora.