Como usar a opção -exec no comando find

3

Eu quero resolver alguns problemas em compiz com meu cérebro e mãos .

A propósito, eu digitei o seguinte comando para criar compiz a partir do código fonte no Ubuntu 12.04

find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={};

Eu mencionei esse comando no link

E a mensagem a seguir é exibida.

Como usar a opção -exec no comando find, acho que é um erro meu.

    
por xiaodongjie 18.06.2014 / 15:10

2 respostas

6

Você está quase lá. Você precisa de um \; no final para deixar saber onde está o final do comando.

find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file={} \;

Para comandos que podem receber vários argumentos de cada vez (por exemplo, se você quiser apenas stat de cada nome de arquivo), use \+ . Isso criará um argumento composto que pode ser executado mais rapidamente porque não é distribuído para cada arquivo:

find . -exec stat {} \+

Isso não funcionará aqui no seu exemplo.

Apenas um teste para destacar que as citações não são necessárias:

$ mkdir 1 2 1\ 2               # makes three directories
$ touch {1,2}/single           # puts a file in each of the two singles
$ touch 1\ 2/COMBO             # puts a file in the dir with a space
$ find -type d -exec ls {} \;
1  1 2  2
single
single
COMBO

Se não estivesse lidando com citações para nós, veríamos isso em vez de COMBO:

1:
correct

2:
correct
    
por Oli 18.06.2014 / 15:16
0

Você pode usar este comando.

find /opt/compiz-built/share/gconf/schemas -exec gconftool-2 --install-schema-file '{}' ';'

De acordo com o manual do comando find ($ man find). existem ações que podem ser predefinidas no comando find, como delete, ls.

Além das ações predefinidas, também podemos invocar comandos arbitrários. o A maneira tradicional de fazer isso é com a ação -exec . Esta ação funciona assim:

-exec command {} ;

onde command é o nome de um comando, {} é uma representação simbólica do atual pathname e o ponto e vírgula é um delimitador obrigatório indicando o final do comando.

Novamente, como os caracteres de chave e ponto e vírgula têm um significado especial para o shell, eles deve ser citado ou ter escapado .

    
por prepangolin 19.06.2014 / 01:34