Subiectul este scris ca răspuns la unul similar.
Dar principala problemă a acestei abordări în cealaltă este că nu corespunde ideologiei unix: problemele complexe sunt rezolvate printr-o combinație de utilități simple.
Și acum despre cum să procedăm.
0. Descompunere
1. Obținerea listei de fișiere
De obicei, ne uităm prin lista de fișiere de către programul ls. Rezultatele sale arată cam așa:
Există o astfel de concluzie? Nu, pentru că nu există suficiente informații în el - trebuie să copiem fișierele recursiv, înseamnă că ar fi mult mai convenabil pentru noi dacă primul program din lanțul nostru a emis nume de fișiere împreună cu căile.
Următorul program care îți vine în minte este să găsești
E mai bine, dar directoarele s-au încheiat și nu avem nevoie de ele. Să încercăm acest lucru:
Iată ce aveți nevoie de acolo. Lista fișierelor.
2. Filtrarea
Această listă de fișiere trebuie filtrată. Redirecționați ieșirea comenzii noastre anterioare la programul grep.
Bine, dar în condițiile acestei sarcini merită să excludem fișierele, așa că vom schimba puțin conductele
Primele două părți sunt finalizate.
Din pagina de comandă pentru comanda cp, putem afla că fișierul sursă trebuie să fie transferat în programul cp ca argument, iar pentru moment putem redirecționa lista numai la intrarea standard.
Utilizăm utilitarul xargs - acceptă intrarea standard și cheamă programul specificat cu parametrii de la intrarea standard. Deci:
-n 1 înseamnă că o singură linie din intrarea standard este înlocuită în comandă și -I% - specifică caracterul care va fi înlocuit în comanda destinație printr-o linie de la intrarea standard. În cazul nostru, asta va fi
În loc să încheiem
Sper că această descriere va ajuta la abordarea corectă a soluției atât a problemelor simple, cât și a celor mai complexe.
Vreau să observ asta
- Această metodă este departe de a fi singură și nici măcar cea mai scurtă, dar cea mai evidentă pentru demonstrarea metodologiei soluției.
- Personal, am folosit-ar tar-exclude = 2-cf - ./ | (cd / path / to / dest / tar-xvf -)
- pentru că acesta este primul meu subiect, mă voi bucura de critici constructive