Executa um comando sobre diretórios com nome recursivamente

1

Eu tenho a seguinte estrutura de diretórios no AIX.

codeRepo/REPO1/AREA1/objects
codeRepo/REPO1/AREA2/SUBAREA1/objects
codeRepo/REPO1/AREA2/SUBAREA2/objects

De codeRepo, quero executar chown myUser * em cada diretório objects na árvore. Como você pode ver, existem vários diretórios de objetos em diferentes lugares.

    
por Richie 08.02.2016 / 01:45

3 respostas

2

Se você quiser apenas os diretórios (e não os subarquivos), use find -exec , como:

find -type d -name objects -exec chown myUser {} \;

Passando por isso: -type d seleciona apenas diretórios -name objects procura apenas pelos diretórios nomeados exatamente como "objetos" -exec chown myUser {} \; executa chown myUser {} para cada caminho encontrado (com {} substituído pelo caminho)

Se você quiser também chown de todos os arquivos, basta substituir chown por chown -R .

    
por 08.02.2016 / 03:13
1

Você quase respondeu sua própria pergunta. a resposta é usar a opção recursiva -R

execute o comando sudo chown -R richie codeRepo / (supondo que seu nome de usuário seja richie)

Isso irá recursivamente definir cada arquivo / pasta para você como o proprietário, mas o faz; até onde a árvore pode chegar, é mais uma abordagem de marreta .

    
por 08.02.2016 / 02:22
1

Use bash option globstar para percorrer qualquer profundidade em ** .

Enquanto em codeRepo :

shopt -s globstar
chown myUser REPO1/AREA*/**/objects

Para precisão, se houver apenas um dígito (caractere) depois de AREA no nome, use ? para indicar um único caractere:

chown myUser REPO1/AREA?/**/objects

Da mesma forma, para dois caracteres:

chown myUser REPO1/AREA??/**/objects
    
por 08.02.2016 / 02:32