Mijn doel is om alleen alle bestanden te kopiëren van ~ / local_dir naar [email protected] / var / www / html / target_dir met scp en maak geen local_dir categorie in local_dir.
/var/www/html/target_dir/files..
maar niet
/var/www/html/target_dir/local_dir/files..
bij gebruik van -r parameter
Reacties
Antwoord
scp heeft het -r argument. Dus, probeer het volgende te gebruiken:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Het argument -r werkt net als het argument -r in cp, het zal je hele map en alle bestanden en submappen overzetten binnen.
Reacties
- Uw commando creëerde
local_dir
directory in / var / www / html / target_dir mijn doel is alleen bestanden kopiëren. - Sorry, ik heb het mis. Herhaal dan gewoon de opdracht, maar op deze manier:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Hernoem vervolgens de nieuwe map indien nodig. - Of
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
Wat dan ook drijft uw boot. - Verander het jokerteken
*
in een punt.
en jij ' ll kopieer de inhoud van de directory (inclusief eventuele puntbestanden) zonder de directory zelf te kopiëren.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Helaas wordt het gebruik van
.
verbroken door een slecht geïmplementeerdescp
" bugfix " (zie < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).rsync
zou een werkend alternatief zijn.
Antwoord
Als je doel is om alle bestanden van local_dir
over te zetten, de *
wildcard doet het:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
De -r
optie betekent “recursief”, dus je moet het schrijven als je “een hele directory of meerdere directories probeert over te dragen.
Van man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Dus als u submappen heeft binnen local_dir
, het laatste voorbeeld zal alleen bestanden overdragen, maar als je de -r
optie instelt, zal het bestanden en directories overdragen.
Opmerkingen
- 1+ Omdat je de opmerkingen in het geaccepteerde antwoord moet lezen om tot het juiste antwoord te komen, terwijl deze het gewoon direct uitlegt.
Answer
/.
toevoegen aan uw brondirectory zal de inhoud ervan overdragen in plaats van de directory zelf. In tegenstelling tot de wildcard-oplossing, zal dit ook alle verborgen bestanden bevatten.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
De eer voor deze oplossing gaat naar roaima, maar ik dacht dat het gepost moest worden als een daadwerkelijk antwoord, niet alleen een opmerking.
Opmerkingen
- Helaas is deze oplossing verbroken door een slecht geïmplementeerde
scp
" bugfix " (zie < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Answer
Volg deze stappen:
-
Directory kopiëren
local_dir
met al zijn submappen:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
kopieer alleen de inhoud van
local_dir
en niet de directorylocal_dir
zelf:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Gebruik niet:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
als het genereert een fout (zojuist getest en kreeg de volgende foutmelding):scp: error: unexpected filename: .
Reacties
- Ik krijg ook de fout van een onverwachte bestandsnaam. Het gebruik van het jokerteken werkt echter ook niet, omdat de directory zoveel bestanden bevat dat de tekenlimiet voor opdrachten wordt overschreden wanneer het jokerteken wordt uitgebreid. macOS
- @RichardKiefer: je kunt jokertekens gebruiken zoals? met * om de zoekresultaten verder te isoleren en vervolgens door te geven aan scp. Probeer deze link, het kan helpen: Wildcards
- Bedankt Syed, maar mijn punt was dat ik eigenlijk alle elementen in de map wil targeten , en niet filteren. En als mijn directory teveel heeft, dan werkt het jokerteken gewoon niet.
- @RichardKiefer: Mijn excuses Richard, om alle bestanden te laten kopiëren, kunnen we een klein bash-script gebruiken. Gebruik:
ls -l | awk '{print $9}'
en stuur alle output (dat zijn alle bestandsnamen) om naar een txt-bestand. Lees het txt-bestand, regel voor regel, en gebruik die invoer met scp om de bestanden te kopiëren:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dir
niet wat je wilt? Als dit het geval is, bewerken met meer details van wat u ' probeert te doen & hebben het tot nu toe geprobeerd.