shell linux: find -exec em find -exec

3

Eu quero executar chmod 555 em todos os arquivos e diretórios que eu recebo com o seguinte comando (ele retorna o teste de diretório e todos os arquivos e diretórios nele):

find ~/.config/google-chrome -type d -name test -exec find {} \;
    
por Fra 24.07.2013 / 16:41

4 respostas

5

Nesse caso, você pode usar chmod -R de acordo com a resposta de Evan, mas, no caso geral, você pode fazer:

find ~/.config/google-chrome -type d -name test -exec sh -c '
  for i do
    find "$i" -exec chmod 555 {\} +
  done' sh {} +

O truque é usar um shell e usar aspas para que o {} interno não seja expandido pelo% externofind.

    
por 24.07.2013 / 16:50
3

Você pode usar chmod -R flag para alterar as permissões do diretório e todos os arquivos e diretórios na hierarquia abaixo dele.

find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' \;
    
por 24.07.2013 / 16:45
2

Se você realmente quiser dois find -exec , tente o seguinte

find /etc -type f -exec sh -c 'find "$0" -exec echo {\} \;' {} \;

(isso apenas passará para o comando echo que find encontrou)

find /etc -type d -exec sh -c 'find "$0" -type f -exec echo "$0" {\} \;' {} \;

(algum exemplo útil: imprime o nome do diretório e a lista de arquivos nele)

Com o uso de sh -c você também pode resolver o problema com pipes na cláusula find -exec , observe também que os argumentos passados para sh -c serão iniciados a partir de $0 e não de $1 como normalmente acontece com o shell script. / p>     

por 24.07.2013 / 17:21
0

Você também pode executar este comando. Ele será executado em cada diretório, mas o argumento + para find executará o chmod com vários diretórios de "teste" transmitidos como argumentos:

$ find ~/.config/google-chrome -type d -name test -exec chmod -R 555 '{}' +
    
por 24.07.2013 / 16:50

Tags