Hur kopierar jag alla filer från en katalog till en fjärrkatalog med scp?

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

  • Gör inte 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.
  • Appending /. är inte längre arbete. Mer här

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 implementerad scp " 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

Svar

Följ dessa steg:

  1. Kopiera katalog local_dir med alla underkataloger:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. kopierar endast innehållet i local_dir och inte katalogen local_dir själv:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. 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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *