Comando de execução para cada nova linha separada [duplicada]

0

Eu tenho isso:

 chmod u+x $(find scripts -name "*.sh")

Mas acredito que só é possível encontrar o chmod u + x para o primeiro item da lista, pois os resultados são separados por nova linha.

Como posso executar chmod u + x para cada item retornado da chamada de busca?

Meu palpite é que xargs é o melhor caminho? algo assim:

 find scripts -name "*.sh" | xargs chmod u+x
    
por Alexander Mills 27.04.2018 / 06:46

1 resposta

2

A maneira mais segura de fazer isso é deixar find executar chmod diretamente e também ter mais cuidado na seleção dos arquivos:

find scripts -type f -name '*.sh' -exec chmod u+x {} +

Isso localizará todos os arquivos regulares dentro ou abaixo do diretório scripts que tem nomes que terminam com .sh e executará chmod u+x no maior número possível desses itens de uma só vez. Ele lidará com nomes de arquivos possivelmente estranhos sem problemas.

Para alterar as permissões apenas nos arquivos que precisam dela:

find scripts -type f -name '*.sh' ! -perm -u+x -exec chmod u+x {} +
    
por 27.04.2018 / 08:48