J'ai du mal à obtenir 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 du répertoire en cours. (ne regarde pas dans les sous-répertoires)
Si j'essaie find . -name *test.c
j'attendrais les mêmes résultats, mais au lieu de cela, il ne me donne que les correspondances qui se trouvent dans un sous-répertoire. Quand 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?
Essayez de mettre entre guillemets - vous rencontrez le développement de joker, alors ce que vous êtes en train de passer à trouver ressemblera à ceci:
find . -name bobtest.c cattest.c snowtest.c
... causant l'erreur de syntaxe. Alors essayez ceci à la place:
find . -name '*test.c'
Notez les guillemets simples autour de votre expression de fichier - ils empêcheront le shell (bash) de développer vos caractères génériques.
Ce qui se passe, c’est que le shell développe "* test.c" dans une liste de fichiers. Essayez d'échapper à l'astérisque en tant que:
find . -name \*test.c
Essayez de le mettre entre guillemets:
find . -name '*test.c'
De trouver manuel:
NON-BUGS
Operator precedence surprises
The command find . -name afile -o -name bfile -print will never print
afile because this is actually equivalent to find . -name afile -o \(
-name bfile -a -print \). Remember that the precedence of -a is
higher than that of -o and when there is no operator specified
between tests, -a is assumed.
“paths must precede expression” error message
$ find . -name *.c -print
find: paths must precede expression
Usage: find [-H] [-L] [-P] [-Olevel] [-D ... [path...] [expression]
This happens because *.c has been expanded by the Shell resulting in
find actually receiving a command line like this:
find . -name frcode.c locate.c Word_io.c -print
That command is of course not going to work. Instead of doing things
this way, you should enclose the pattern in quotes or escape the
wildcard:
$ find . -name '*.c' -print
$ find . -name \*.c -print
Je suis tombé sur cette question lorsque j'essayais de trouver plusieurs noms de fichiers que je ne pouvais pas combiner dans une expression régulière comme décrit dans la réponse de @Chris J, voici ce qui a fonctionné pour moi
find . -name one.pdf -o -name two.txt -o -name anotherone.jpg
-o
ou -or
est un OU logique. Voir Recherche de fichiers sur Gnu.org pour plus d'informations.
Je courais ceci sur CygWin.
Dans mon cas, il me manquait la fin /
dans le chemin.
find /var/opt/gitlab/backups/ -name *.tar