Comando para alterar permissões apenas em arquivos que não são diretórios

3

Eu tenho o seguinte comando

find . -type f -print0 | xargs -0 chmod 644 

que mudaria com sucesso para 644 as permissões em todos os arquivos em. desde que os nomes dos arquivos não contenham espaços embutidos. No entanto, não funciona em geral.

Por exemplo

touch "hullo world"
chmod 777 "hullo*"
find . -type f -print0 | xargs -0 chmod 644 

retorna

/bin/chmod: cannot access './hello': No such file or directory
/bin/chmod: cannot access 'world': No such file or directory

Existe uma maneira de modificar o comando para que ele possa lidar com arquivos com espaços incorporados?

Muito obrigado por qualquer conselho.

    
por Leo Simon 06.11.2015 / 05:07

1 resposta

3

Sem xargs

find . -type f -exec chmod 644 {} \;

ou com xargs

find . -type f -print0 | xargs -0 -I {} chmod 644 {}

as opções xargs usadas

  • -0 Se houver espaços em branco ou caracteres (incluindo novas linhas), muitos comandos não funcionarão. Esta opção considera os nomes dos arquivos com espaço em branco.

  • -I Substitua as ocorrências de replace-str nos argumentos iniciais por nomes lidos da entrada padrão. Além disso, espaços em branco sem aspas não terminam itens de entrada; em vez disso, o separador é o caractere de nova linha.

Explicação de aqui

    
por A.B. 06.11.2015 / 06:55