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_dirin / 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_dirQualunque 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/… ).rsyncsarebbe 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_dircon tutte le sue sottodirectory:scp -r ~/local_dir [email protected] /var/www/html/target_dir -
copia solo il contenuto di
local_dire non la directorylocal_dirstessa:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir -
Non utilizzare:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dircome 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_dirnon fa quello che vuoi? In tal caso, modifica con maggiori dettagli su ciò che ' stai cercando di fare & ho provato finora.