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_dirkatalog 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_dirVad 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/… ).rsyncskulle 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_dirmed alla underkataloger:scp -r ~/local_dir [email protected] /var/www/html/target_dir -
kopierar endast innehållet i
local_diroch inte katalogenlocal_dirsjä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_dirsom 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_dirvad 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.