Jexécute la commande suivante, mais elle nest pas exécutée de manière récursive:

find . -name *.java 

Je sais quil y a des fichiers java plus bas dans le répertoire actuel mais il exécute le find sur le répertoire courant uniquement. Jutilise OS X, 10.9.

Réponse

Le problème est que vous navez « pas cité votre . Faites-le à la place:

find . -name "*.java" 

Explication

Sans les guillemets, le shell interprète *.java comme un motif global et létend à tous les noms de fichiers correspondant au glob avant de le transmettre à find. De cette façon, si vous aviez, disons, foo.java dans le répertoire actuel, find « serait:

find . -name foo.java 

qui listerait évidemment le fichier dans le répertoire courant uniquement (sauf si vous avez des noms similaires find tel quel.

Les citations empêchent lexpansion de glob et passent la ligne de commande à find telle quelle.

Incidemment, si le glob ne correspondait pas (pas de fichiers *.java dans le répertoire actuel tory), vous obtiendrez lun des deux comportements selon la configuration de votre shell pour gérer les globes qui ne correspondent pas (ceci est régi par loption nullglob dans Bash, par exemple ):

  1. Si un glob qui ne correspond pas nest pas développé par le shell, find affichera (par inadvertance, attention) un comportement correct.
  2. Si un glob qui ne correspond pas est développé dans une chaîne vide par le shell, find se plaindra quil manque un argument pour -name.

Réponse

Jai eu une situation similaire où jentourais le -name valeur entre guillemets, mais nobtenait toujours pas tous les résultats de recherche que jespérais. Jai supposé que cétait à cause des liens symboliques et bien sûr que cétait le cas. Si vous voulez forcer Find à rechercher via des liens symboliques, vous pouvez modifier la commande comme suit:

find -L . -name "*.java" 

Commentaires

  • Les liens symboliques étaient aussi mon problème. -follow est un synonyme plus lisible de -L, à condition que vous le placiez avant les autres paramètres.
  • Excellent ! Merci beaucoup!! +1!

Réponse

Échapper à *

find . -name \*.java 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *