Hvordan kopieres alle filer fra et bibliotek til et eksternt bibliotek ved hjælp af scp?

Mit mål er kun at kopiere alle filer fra ~ / local_dir til [email protected] / var / www / html / target_dir ved hjælp af scp og opret ikke lokal_dir-kategori i local_dir.

/var/www/html/target_dir/files.. 

men ikke

/var/www/html/target_dir/local_dir/files.. når brug -r-parameter

Kommentarer

  • Gør scp * [email protected]:/var/www/html/target_dir ikke det, du vil have? Hvis ja, bedes du redigere med flere detaljer om, hvad du ' forsøger at gøre & har forsøgt indtil videre.
  • Appending /. er ikke længere arbejde. Mere her

Svar

scp har argumentet -r. Så prøv at bruge:

$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir 

Argumentet -r fungerer ligesom -r arg i cp, det overfører hele din mappe og alle filer og underkataloger inde.

Kommentarer

  • Din kommando oprettede local_dir -mappe i / var / www / html / target_dir mit mål er kun at kopiere filer.
  • Beklager, jeg fik det forkert. Gentag derefter kommandoen, men sådan: $ scp -r ~/local_dir [email protected]:/var/www/html/ Omdøb derefter den nye mappe, hvis det er nødvendigt.
  • Eller $ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir Uanset hvad flyder din båd.
  • Skift jokertegnet * til et punkt . og du ' Kopierer biblioteksindholdet (inklusive eventuelle dot-filer) uden at kopiere selve biblioteket. scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
  • Desværre er brugen af . blevet brudt af en dårligt implementeret scp " bugfix " (se < superbruger.com/questions/1403473/scp-error-unexpected-filename/… ). rsync ville være et fungerende alternativ.

Svar

Hvis dit mål er at overføre alle filer fra local_dir * jokertegnet gør tricket:

$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir 

Valget -r betyder “rekursivt”, så du skal skrive det, når du prøver at overføre en hel mappe eller flere mapper.

Fra man scp:

-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal. 

Så hvis du har underkataloger inde i local_dir, det sidste eksempel overfører kun filer, men hvis du indstiller -r, overfører det filer og mapper.

Kommentarer

  • 1+ Fordi du skal læse kommentarerne i det accepterede svar for at komme til det rigtige svar, mens denne bare forklarer det direkte.

Svar

Tilføjer /. til dit kildekatalog overfører dets indhold i stedet for selve kataloget. I modsætning til wildcard-løsningen vil dette også omfatte skjulte filer.

$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir 

Kredit for denne løsning går til roaima, men jeg troede, at den skulle bogføres som et faktisk svar, ikke kun en kommentar.

Kommentarer

Svar

Følg disse trin:

  1. Kopier bibliotek local_dir med alle dets underkataloger:

    scp -r ~/local_dir [email protected] /var/www/html/target_dir 
  2. kopier kun indholdet af local_dir og ikke selve kataloget local_dir:

    scp -r ~/local_dir/* [email protected] /var/www/html/target_dir 
  3. Brug ikke: scp -r ~/local_dir/. [email protected] /var/www/html/target_dir som det kaster en fejl (netop testet og modtaget følgende fejl):

    scp: error: unexpected filename: . 

Kommentarer

  • Jeg får også fejlen med uventet filnavn. Brug af jokertegnet fungerer dog heller ikke, fordi biblioteket har så mange filer, der overstiger tegngrænsen for kommandoer, når jokertegnet bliver udvidet. macOS
  • @RichardKiefer: Du kan bruge jokertegn som? med * for yderligere at isolere søgeresultaterne og derefter overføre dem til scp. Prøv dette link, det kan hjælpe: Wildcards
  • Tak Syed, men min pointe var, at jeg faktisk vil målrette mod alle elementer i mappen og ikke filtrere nogen. Og hvis min mappe har for mange, fungerer jokertegnet bare ikke.
  • @RichardKiefer: Jeg beklager Richard, for at få alle filerne kopieret kan vi bruge et lille bash-script. Brug: ls -l | awk '{print $9}' og omdiriger alt output (hvilket ville være alle filnavne) til en txt-fil. Læs txt-filen, en linje ad gangen, og brug indgangen med scp til at kopiere filerne: input=/home/user/filename.txt while IFS= read -r line

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *