2012-09-04 6 views
0

Je pense que le format de cette commande a changé depuis que je l'ai utilisé pour la dernière fois, et maintenant je ne comprends pas ce qu'elle attend de moi.find-dired comment passer des arguments?

Je reçois une erreur: find: unknown predicate '-name=*.xml'

La façon dont il semble essayer d'invoquer trouver est comme ceci:

find . \(-name="*.xml" \) -ls 

Je ne comprends pas cette syntaxe :(Est-il essayer de Créer un shell imbriqué? Pourquoi? Si oui, est-ce qu'il essaie de créer une liste d'arguments? Pourquoi?

Je pourrais juste aller éditer cette fonction pour enlever la parenthèse, mais pourquoi quelqu'un les mettrait-il? Manque quelque chose.

Répondre

2

Les parenthèses regroupent les termes de recherche que vous avez regroupés en un groupe logique de sorte qu'ils n'affectent rien d'autre par la suite. Je suppose qu'ils sont mis là pour encapsuler complètement tout ce que vous pourriez y mettre afin que le -ls (ou toute autre option qu'il peut ajouter en raison d'autres paramètres variables, etc) s'exécute toujours. Les parenthèses sont l'ordre le plus élevé de la parenthèse. Il est pas en essayant de créer un shell imbriqué; c'est pourquoi les \ sont là: ça les passe pour se retrouver.

Mais votre vrai problème est que find a besoin de -name avec un espace après, pas avec un signe =. (c'est-à-dire, l'argument à -name devrait être un argument séparé). Il ne fonctionne pas comme beaucoup des arguments avec un double tiret que vous attendez d'autres outils (notamment ceux écrits en utilisant la mise en œuvre GNU getopt_long l'analyse syntaxique.

, essayez -name *.xml à la place.

Et pour un information supplémentaire, voici la page de manuel de recherche à propos de () s:

(expr) 
      Force precedence. Since parentheses are special to the shell, 
      you will normally need to quote them. Many of the examples in 
      this manual page use backslashes for this purpose: `\(...\)' 
      instead of `(...)'.