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
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 implementeretscp
" 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
- Desværre er denne løsning blevet brudt af en dårligt implementeret
scp
" bugfix " (se < superbruger.com/questions/1403473/scp-error-unexpected-filename/… ).
Svar
Følg disse trin:
-
Kopier bibliotek
local_dir
med alle dets underkataloger:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
kopier kun indholdet af
local_dir
og ikke selve katalogetlocal_dir
:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
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
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.