Målet mitt er bare å kopiere alle filer fra ~ / local_dir til [email protected] / var / www / html / target_dir ved hjelp av scp og ikke opprett lokal_dir-kategori i local_dir.
/var/www/html/target_dir/files..
men ikke
/var/www/html/target_dir/local_dir/files..
når du bruker -r parameter
Kommentarer
Svar
scp har argumentet -r. Så prøv å bruke:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Argumentet -r fungerer akkurat som -r arg i cp, det vil overføre hele mappen og alle filene og underkatalogene inne.
Kommentarer
- Kommandoen din opprettet
local_dir
katalog i / var / www / html / target_dir Målet mitt er å kopiere bare filer. - Beklager, jeg har feil. Så er det bare å gjenta kommandoen, men slik:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Endre navn på ny katalog hvis nødvendig. - Eller
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
Uansett flyter båten din. - Endre jokertegnet
*
til et punktum.
og du ' Kopier kataloginnholdet (inkludert eventuelle punktfiler) uten å kopiere katalogen.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Dessverre har bruk av
.
blitt brutt av en dårlig implementertscp
" bugfix " (se < superbruker.com/questions/1403473/scp-error-unexpected-filename/… ).rsync
ville være et fungerende alternativ.
Svar
Hvis målet ditt er å overføre alle filer fra local_dir
*
jokertegnet gjør susen:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
Alternativet -r
betyr «rekursivt», så du må skrive det når du prøver å overføre en hel katalog eller flere kataloger.
Fra man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Så hvis du har underkataloger i local_dir
, det siste eksemplet vil bare overføre filer, men hvis du angir alternativet -r
, vil det overføre filer og kataloger.
Kommentarer
- 1+ Fordi du trenger å lese kommentarene i det aksepterte svaret for å komme til riktig svar, mens denne bare forklarer det direkte.
Svar
Legger til /.
til kildekatalogen din vil overføre innholdet i stedet for selve katalogen. I motsetning til jokertegnløsningen vil dette også inkludere skjulte filer.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Kreditt for denne løsningen går til roaima, men jeg tenkte at den skulle bli lagt ut som et faktisk svar, ikke bare en kommentar.
Kommentarer
- Dessverre er denne løsningen ødelagt av en dårlig implementert
scp
" bugfix " (se < superbruker.com/questions/1403473/scp-error-unexpected-filename/… ).
Svar
Følg disse trinnene:
-
Kopier katalog
local_dir
med alle underkatalogene:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
bare kopier innholdet i
local_dir
og ikke katalogenlocal_dir
i seg selv:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Ikke bruk:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
som det kaster en feil (nettopp testet og mottatt følgende feil):scp: error: unexpected filename: .
Kommentarer
- Jeg får også feilen med uventet filnavn. Imidlertid fungerer ikke jokertegnet heller, fordi katalogen har så mange filer som overstiger tegngrensen for kommandoer når jokertegnet blir utvidet. macOS
- @RichardKiefer: Du kan bruke jokertegn som? med * for å isolere søkeresultatene ytterligere og deretter overføre dem til scp. Prøv denne lenken, det kan hjelpe: Jokertegn
- Takk Syed, men poenget mitt var at jeg faktisk vil målrette mot alle elementene i mappen , og ikke filtrere noen. Og hvis katalogen min har for mange, vil ikke jokertegnet bare fungere.
- @RichardKiefer: Jeg beklager Richard, for å få alle filene kopiert kan vi bruke et lite bash-skript. Bruk:
ls -l | awk '{print $9}'
og omdiriger all utdata (som vil være alle filnavnene) til en txt-fil. Les txt-filen, en linje om gangen, og bruk den inngangen med scp til å kopiere filene:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dir
det du vil? Hvis ja, vennligst rediger med mer detaljer om hva du ' prøver å gjøre & har prøvd så langt.