Tavoitteenani on vain kopiointi kaikki tiedostot ~ / local_dir – [email protected] / var / www / html / target_dir käyttäen scp äläkä luo local_dir-luokkaa local_dir.
/var/www/html/target_dir/files..
mutta ei
/var/www/html/target_dir/local_dir/files..
käytettäessä parametria -r
Kommentit
Vastaa
scp on -r-argumentti. Yritä siis käyttää:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Argumentti -r toimii samalla tavalla kuin -r arg cp: ssä, se siirtää koko kansion sekä kaikki tiedostot ja alihakemistot sisällä.
Kommentit
- Komentosi loi
local_dir
-hakemiston hakemistoon / var / www / html / target_dir tavoitteeni on vain kopioida tiedostot. - Valitettavasti sain väärin. Toista sitten komento, mutta näin:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Nimeä sitten uusi hakemisto tarvittaessa. - Tai
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
Mikä tahansa kelluu veneelläsi. - Vaihda jokerimerkki
*
pisteeksi.
ja sinä ' kopioi hakemiston sisällön (mukaan lukien kaikki pistetiedostot) kopioimatta itse hakemistoa.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Huonosti toteutettu
scp
. -toiminnon. / div> " virhekorjaus " (katso < superuser.com/questions/1403473/scp-error-unexpected-filename/… ). rsync
olisi toimiva vaihtoehto.
Vastaa
Jos tavoitteesi on siirtää kaikki tiedostot tiedostosta local_dir
*
jokerilla on temppu:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
-r
-vaihtoehto tarkoittaa ”rekursiivisesti”, joten sinun on kirjoitettava se, kun yrität siirtää koko hakemistoa tai useita hakemistoja.
Alkaen man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Joten jos sinulla on alihakemistoja local_dir
, viimeinen esimerkki siirtää vain tiedostoja, mutta jos valitset vaihtoehdon -r
, se siirtää tiedostot ja hakemistot.
Kommentit
- 1+ Koska sinun on luettava hyväksytyn vastauksen kommentit, jotta pääset oikeaan vastaukseen, kun tämä selittää sen suoraan.
vastaus
Liitetään /.
lähdehakemisto siirtää sen sisällön itse hakemiston sijaan. Päinvastoin kuin jokerimerkkiratkaisu, tämä sisältää myös kaikki piilotetut tiedostot.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Tämän ratkaisun hyvitys menee roaimaan, mutta ajattelin, että se tulisi lähettää todellinen vastaus, ei vain kommentti.
Kommentit
- Valitettavasti huonosti toteutettu " virhekorjaus " (katso < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
vastaus
Noudata näitä ohjeita:
-
Kopioi hakemisto
local_dir
ja kaikki sen alihakemistot:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
kopioi vain
local_dir
eikä hakemistoalocal_dir
itse:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Älä käytä:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
as se heittää virheen (juuri testattu ja vastaanotettu seuraava virhe):scp: error: unexpected filename: .
kommentit
- Saan myös odottamattoman tiedostonimen virheen. Jokerimerkin käyttö ei kuitenkaan toimi, koska hakemistossa on niin monta tiedostoa, joka ylittää komentojen merkkirajoituksen, kun jokerimerkki laajennetaan. macOS
- @RichardKiefer: Voit käyttää jokerimerkkejä kuten? painamalla * eristääksesi hakutulokset edelleen ja välittämällä sen scp: lle. Kokeile tätä linkkiä, se voi auttaa: Jokerot
- Kiitos Syed, mutta totesin, että haluan todella kohdistaa kaikkiin kansion elementteihin ja älä suodata mitään. Ja jos hakemistossa on liikaa, jokerimerkki ei vain toimi.
- @RichardKiefer: Pahoittelen Richardia, jotta voimme kopioida kaikki tiedostot, voimme käyttää pientä bash-komentosarjaa. Käytä:
ls -l | awk '{print $9}'
ja ohjaa kaikki ulostulot (jotka olisivat kaikki tiedostonimet) txt-tiedostoon. Lue txt-tiedosto, yksi rivi kerrallaan, ja kopioi tiedostot scp: n kanssa:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dir
tee mitä haluat? Jos näin on, muokkaa tarkemmin siitä, mitä ' yrität tehdä & ovat toistaiseksi yrittäneet.