J'ai du mal à trouver pour rechercher des correspondances dans le répertoire actuel ainsi que dans ses sous-répertoires.
Lorsque je lance, find *test.c
il ne me donne que les correspondances dans le répertoire courant. (ne regarde pas dans les sous-répertoires)
Si j'essaye, find . -name *test.c
je m'attendrais aux mêmes résultats, mais à la place, cela ne me donne que des correspondances qui se trouvent dans un sous-répertoire. Lorsqu'il y a des fichiers qui doivent correspondre dans le répertoire de travail, cela me donne:find: paths must precede expression: mytest.c
Que signifie cette erreur et comment puis-je obtenir les correspondances à la fois du répertoire actuel et de ses sous-répertoires?
find
de msysgit peut jeter cette erreur à moins que vous entourez le motif avec guillemets:find . -name "*test.c"
. (Dans le cas où vous choisissez de le préférer à Windows différentfind.exe
et à utiliser à partir de cmd)Réponses:
Essayez de le mettre entre guillemets - vous exécutez l'extension générique du shell, de sorte que ce que vous passez réellement à trouver ressemblera à:
... provoquant l'erreur de syntaxe. Essayez donc ceci à la place:
Notez les guillemets simples autour de votre expression de fichier - ceux-ci arrêteront le shell (bash) développant vos caractères génériques.
la source
echo *test.c
... le résultat ne sera pas l'écho qui étend le caractère générique, mais le shell lui-même. La leçon simple est que si vous utilisez des caractères génériques, citez la spécification de fichier :-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
comme on le trouve sur le Web et j'ai rencontré "les chemins doivent précéder l'expression". Le problème était que les guillemets étaient trop «intelligents». J'ai retapé la commande, provoquant le remplacement des guillemets, et elle a fonctionné.find
- si vous utilisez un caractère générique,*.$variable
vous avez besoin de guillemets doubles.Ce qui se passe, c'est que le shell étend "* test.c" dans une liste de fichiers. Essayez d'échapper à l'astérisque en tant que:
la source
find . -name '*txt'
Essayez de le mettre entre guillemets:
la source
Depuis le manuel de recherche:
la source
Je suis tombé sur cette question lorsque j'essayais de trouver plusieurs noms de fichiers que je ne pouvais pas combiner en une expression régulière comme décrit dans la réponse de @Chris J, voici ce qui a fonctionné pour moi
-o
ou-or
est OU logique. Voir Recherche de fichiers sur Gnu.org pour plus d'informations.J'exécutais cela sur CygWin.
la source
Dans mon cas, je manquais
/
de suivre dans le chemin.la source
/
n'est pas requis.