Mitt mål är att bara kopiera alla filer från ~ / local_dir till [email protected] / var / www / html / target_dir med scp och skapa inte lokal_dir-kategori i local_dir.
/var/www/html/target_dir/files..
men inte
/var/www/html/target_dir/local_dir/files..
vid användning -r-parameter
Kommentarer
Svar
scp har argumentet -r. Så försök att använda:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Argumentet -r fungerar precis som -r arg i cp, det överför hela din mapp och alla filer och underkataloger inuti.
Kommentarer
- Ditt kommando skapade
local_dir
katalog i / var / www / html / target_dir mitt mål är att bara kopiera filer. - Tyvärr, jag har fel. Upprepa bara kommandot, men så här:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Byt namn på ny katalog om det behövs. - Eller
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
Vad som helst flyter din båt. - Ändra jokertecknet
*
till en punkt.
och du ' Kopierar katalogens innehåll (inklusive eventuella punktfiler) utan att kopiera själva katalogen.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Tyvärr har användningen av
.
brutits av en dåligt implementeradscp
" bugfix " (se < superanvändare.com/questions/1403473/scp-error-unexpected-filename/… ).rsync
skulle vara ett fungerande alternativ.
Svar
Om ditt mål är att överföra alla filer från local_dir
*
jokertecken gör tricket:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
Alternativet -r
betyder ”rekursivt”, så du måste skriva det när du försöker överföra en hel katalog eller flera kataloger.
Från man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Så om du har underkataloger i local_dir
, det sista exemplet överför bara filer, men om du ställer in alternativet -r
överför det filer och kataloger.
Kommentarer
- 1+ Eftersom du måste läsa kommentarerna i det accepterade svaret för att komma till rätt svar, medan den här bara förklarar det direkt.
Svar
Lägg till /.
till din källkatalog överför dess innehåll istället för själva katalogen. Till skillnad från jokerteckenlösningen kommer detta också att innehålla dolda filer.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Kredit för den här lösningen går till roaima, men jag tyckte att den borde bokföras som ett verkligt svar, inte bara en kommentar.
Kommentarer
- Tyvärr har denna lösning brutits av en dåligt implementerad
scp
" bugfix " (se < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Svar
Följ dessa steg:
-
Kopiera katalog
local_dir
med alla underkataloger:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
kopierar endast innehållet i
local_dir
och inte katalogenlocal_dir
själv:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Använd inte:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
som det kastar ett fel (testades bara och fick följande fel):scp: error: unexpected filename: .
Kommentarer
- Jag får också felet med oväntat filnamn. Att använda jokertecken fungerar dock inte heller, eftersom katalogen har så många filer som överskrider teckengränsen för kommandon när jokertecknet expanderas. macOS
- @RichardKiefer: Du kan använda jokertecken som? med * för att ytterligare isolera sökresultaten och sedan skicka det till scp. Prova den här länken, det kan hjälpa: Jokertecken
- Tack Syed, men min poäng var att jag faktiskt vill rikta in mig på alla element i mappen och inte filtrera någon. Och om min katalog har för många kommer jokerteckenet bara inte att fungera.
- @RichardKiefer: Jag ber om ursäkt Richard, för att få alla filer kopierade kan vi använda ett litet bash-skript. Använd:
ls -l | awk '{print $9}'
och omdirigera all utdata (vilket skulle vara alla filnamn) till en txt-fil. Läs txt-filen, en rad i taget och använd den ingången med scp för att kopiera filerna:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dir
vad du vill? Om så är fallet, vänligen redigera med mer information om vad du ' försöker göra & har försökt hittills.