znajdź używając dopasowań wyrażenia regularnego i echa

2

Mam około 50 użytkowników w katalogu / home / i sklonowałem repozytorium git dla wszystkich:

Wykonany w / home / jako użytkownik root:

find . -maxdepth 1 -type d ! -name . -prune -exec git clone /shared/repos/project_xpto.git {}/www/xpto/ \;

Teraz muszę ustawić właścicieli tych sklonowanych repozytoriów.

Chcę wykonać chown nazwę_folderu_użytkownika: development -R ./user/www/xpto/ dla każdego sklonowanego repozytorium.

Potem zacząłem od:

find . -maxdepth 1 -regextype sed -regex "./\([A-Za-z0-9-_]\).*" -type d -exec echo {}/ \;

I chcę się zaangażować w:

find . -maxdepth 1 -regextype sed -regex "./\([A-Za-z0-9-_]\).*" -type d -exec chown ${expr1}:development {}/www/xpto/ -R

Wiem, że $ {wyrażenie1} nie istnieje. Chcę tylko wiedzieć, jak zwrócić mój pierwszy dopasowany wzór wyrażenia regularnego, a następnie dostanę nazwę użytkownika, bez kropek i ukośników, z każdego folderu, aby ustawić właściciela.

Luiz Gustavo F. Gama
źródło
Dlaczego nie przekazać nazwy folderu jako argumentu skryptu i pozwolić mu wyodrębnić nazwę użytkownika z nazwy folderu?
Barmar

Odpowiedzi:

0

Czy findto prawdziwy wymóg?

Myślę o czymś takim

ls -1d /home/*/www/xpto | awk -F/ '{print "chown",$3":development",$0}'

(Zakładam, że twoje nazwy użytkowników są takie same jak nazwy folderów domowych).

Z powyższym kodem otrzymasz polecenia, które możesz następnie uruchomić z xargstymczasowym skryptem lub w nim.

MaxChinni
źródło
Zasadniczo findjest lepszy niż parsowaniels .
Kamil Maciorowski
@KamilMaciorowski ogólnie masz rację, ale, jak widać, nie jest to ogólne pytanie, a „awk” wypisuje tylko każde polecenie.
MaxChinni