Scopul meu este să copiez numai toate fișierele ~ / local_dir la [email protected] / var / www / html / target_dir utilizând scp și nu creați categoria local_dir în local_dir.
/var/www/html/target_dir/files..
dar nu
/var/www/html/target_dir/local_dir/files..
când utilizați parametrul -r
Comentarii
Răspuns
scp are argumentul -r. Deci, încercați să utilizați:
$ scp -r ~/local_dir [email protected]:/var/www/html/target_dir
Argumentul -r funcționează la fel ca -r arg în cp, vă va transfera întregul folder și toate fișierele și subdirectoarele înăuntru.
Comentarii
- Comanda dvs. a creat directorul
local_dir
în / var / www / html / target_dir obiectivul meu este să copiez numai fișiere. - Ne pare rău, am greșit. Apoi repetați comanda, dar așa:
$ scp -r ~/local_dir [email protected]:/var/www/html/
Apoi redenumiți noul director dacă este necesar. - Sau
$ scp -r ~/local_dir/* [email protected]:/var/www/html/target_dir
plutește barca dvs. - Schimbați wildcard-ul
*
într-un punct.
și dvs. ' Voi copia conținutul directorului (inclusiv orice fișiere punct) fără a copia directorul în sine.scp -pr ~/local_dir/. [email protected]:/path/to/target_dir
- Din păcate, utilizarea
.
a fost întreruptă de unscp
" remedierea erorilor " (vezi < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).rsync
ar fi o alternativă de lucru.
Răspuns
Dacă obiectivul dvs. este să transferați toate fișierele din local_dir
wildcard-ul *
face trucul:
$ scp ~/local_dir/* [email protected]:/var/www/html/target_dir
Opțiunea -r
înseamnă „recursiv”, deci trebuie să o scrieți atunci când încercați să transferați un director întreg sau mai multe directoare.
Din man scp
:
-r Recursively copy entire directories. Note that scp follows symbolic links encountered in the tree traversal.
Deci, dacă aveți subdirectoare în interiorul local_dir
, ultimul exemplu va transfera numai fișiere, dar dacă setați opțiunea -r
, acesta va transfera fișiere și directoare.
Comentarii
- 1+ Pentru că trebuie să citiți comentariile din răspunsul acceptat pentru a ajunge la răspunsul corect, în timp ce acesta îl explică direct.
Răspuns
Se adaugă /.
directorul sursă își va transfera conținutul în loc de directorul în sine. Spre deosebire de soluția wildcard, aceasta va include și toate fișierele ascunse.
$ scp -r ~/local_dir/. [email protected]:/var/www/html/target_dir
Creditul pentru această soluție revine la roaima, dar am considerat că ar trebui să fie postat un răspuns real, nu doar un comentariu.
Comentarii
- Din păcate, această soluție a fost spartă de un " remedierea erorilor " (vezi < superuser.com/questions/1403473/scp-error-unexpected-filename/… ).
Răspuns
Urmați acești pași:
-
Copiați directorul
local_dir
cu toate subdirectoarele sale:scp -r ~/local_dir [email protected] /var/www/html/target_dir
-
copiați doar conținutul
local_dir
și nu directorullocal_dir
în sine:scp -r ~/local_dir/* [email protected] /var/www/html/target_dir
-
Nu utilizați:
scp -r ~/local_dir/. [email protected] /var/www/html/target_dir
as generează o eroare (tocmai am testat și am primit următoarea eroare):scp: error: unexpected filename: .
Comentarii
- De asemenea, primesc eroarea unui nume de fișier neașteptat. Cu toate acestea, folosirea metacaracterului nu funcționează, deoarece directorul are atât de multe fișiere care depășește limita de caractere pentru comenzi atunci când metacaracterul este extins. macOS
- @RichardKiefer: Puteți folosi metacaracteri ca? cu * pentru a izola în continuare rezultatele căutării și apoi pentru a le transmite scp. Încercați acest link, poate ajuta: Wildcards
- Mulțumesc Syed, dar ideea mea a fost că vreau să vizez toate elementele din dosar , și nu filtrați niciunul. Și dacă directorul meu are prea multe, atunci nu va funcționa wildcard-ul.
- @RichardKiefer: scuzele mele Richard, pentru a copia toate fișierele putem folosi un mic script bash. Utilizați:
ls -l | awk '{print $9}'
și redirecționați toate ieșirile (care ar fi toate numele fișierelor) către un fișier txt. Citiți fișierul txt, rând pe rând și utilizați acea intrare cu scp pentru a copia fișierele:input=/home/user/filename.txt while IFS= read -r line
scp * [email protected]:/var/www/html/target_dir
nu face ceea ce doriți? Dacă da, vă rugăm să editați cu mai multe detalii despre ceea ce ' încercați să faceți & am încercat până acum.