web-dev-qa-db-fra.com

Comment utiliser l'option -exec dans la commande find

Je veux résoudre quelques problèmes dans compiz avec mes mains cerveau et .

À propos, j’ai entré la commande suivante pour construire compiz à partir du source dans Ubuntu 12.04

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

J'ai référé cette commande à http://www.brazzi64.net/blog/building-compiz-from-source-in-ubuntu-12-04/

Et le message suivant est affiché.

Comment utiliser l'option -exec dans la commande find, je suppose que c'est mon erreur.

3
xiaodongjie

Tu y es presque. Vous avez besoin d'un \; à la fin pour laisser savoir où se trouve la fin de la commande.

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

Pour les commandes pouvant prendre plusieurs arguments à la fois (par exemple, si vous vouliez uniquement stat chaque nom de fichier), vous pouvez utiliser \+ à la place. Cela construira un argument composé qui peut s'exécuter plus rapidement car il ne débite pas pour chaque fichier:

find . -exec stat {} \+

Cela ne fonctionnera pas ici pour votre exemple cependant.


Juste un test de harnais pour souligner que les guillemets ne sont pas nécessaires:

$ 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

Si ce n'était pas le traitement des devis pour nous, nous verrions ceci au lieu de COMBO:

1:
correct

2:
correct
6
Oli

Vous pouvez utiliser cette commande.

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

Selon le manuel de la commande find ($ man find). il existe des actions que vous pouvez prédéfinir dans la commande find, telles que delete, ls.

En plus des actions prédéfinies, nous pouvons également invoquer des commandes arbitraires. La méthode traditionnelle consiste à utiliser l'action - exec. Cette action fonctionne comme ceci:

-exec command {} ;

où commande est le nom d'une commande, {} est une représentation symbolique du chemin actuel et le point-virgule est un séparateur obligatoire indiquant la fin de la commande.

Encore une fois, puisque les caractères d'accolade et de point-virgule ont une signification particulière pour le shell, ils doivent être cités ou échappés.

0
prepangolin