J'ai quelques images nommées avec la chaîne uuid1 générée. Par exemple 81397018-b84a-11e0-9d2a-001b77dc0bed.jpg. Je veux découvrir toutes ces images en utilisant la commande "find":
find . -regex "[a-f0-9\-]\{36\}\.jpg".
Mais ça ne marche pas. Quelque chose ne va pas avec l'expression régulière? Quelqu'un pourrait-il m'aider avec ça?
Réponses:
Notez que vous devez spécifier
.*/
au début carfind
correspond au chemin entier.Exemple:
Ma version de find:
la source
"^ ... $"
entourant votre expression régulière. Il doit correspondre à la ligne de résultat ENTIER./
entrée.*/
car.*
correspond à zéro ou plus de (presque) n'importe quel caractère.\{36\}
valid types are 'findutils-default', 'awk', ' egrep', 'ed', 'emacs', 'gnu-awk', 'grep', 'posix-awk', 'posix-basic', 'posix-egrep', 'posix -extended', 'posix-minimal-basic', 'sed'.
-regextype
drapeau avant le-regex
drapeau, sinon il ne s'applique pas!L'
-regex
expression de recherche correspond au nom entier , y compris le chemin relatif du répertoire actuel. Pourfind .
cela commence toujours par./
, puis tous les répertoires.De plus, ce sont
emacs
des expressions régulières, qui ont d'autres règles d'échappement que les expressions régulières egrep habituelles.Si ceux-ci sont tous directement dans le répertoire courant, alors
devrait marcher. (Je ne suis pas vraiment sûr - je ne peux pas faire fonctionner la répétition comptée ici.) Vous pouvez passer aux expressions egrep en
-regextype posix-egrep
:(Notez que tout ce qui est dit ici est pour GNU find, je ne sais rien de celui de BSD qui est aussi le défaut sur Mac.)
la source
posix-egrep
type fonctionnait pour moi.-regextype
est une option pour GNUfind
et non BSD (du moins pas comme Mac BSD)find
. Si cette option n'est pas disponible, assurez-vous d'installer GNU find. Si sur un Mac, c'est possible avec le package de brassagefindutils
. La recherche est alors disponible viagfind
.À en juger par d'autres réponses, il semble que ce soit la faute de la trouvaille.
Cependant, vous pouvez le faire de cette façon à la place:
find . * | grep -P "[a-f0-9\-]{36}\.jpg"
Vous devrez peut-être modifier légèrement la grep et utiliser différentes options en fonction de ce que vous voulez, mais cela fonctionne.
la source
find
de »-prune
la fonctionnalité qui permet de sauter certains répertoires tout à fait. Le plus souvent, ce n'est pas vraiment important, mais cela vaut la peine d'être mentionné.sur Mac OS X (recherche BSD) : Identique à la réponse acceptée, le
.*/
préfixe est nécessaire pour correspondre à un chemin complet:man find
dit-E
utilise un support regex étendula source
-E
n'est pas disponible sur Ubuntu (testé sur WSL Ubuntu)Essayez d'utiliser des guillemets simples (') pour éviter l'échappement du shell de votre chaîne. N'oubliez pas que l'expression doit correspondre à l'ensemble du chemin, c'est-à-dire doit ressembler à:
En dehors de cela, il semble que ma recherche (GNU 4.4.2) ne connaisse que les expressions régulières de base, en particulier pas la syntaxe {36}. Je pense que vous devrez vous en passer.
la source
Manière simple - vous pouvez spécifier. * Au début car find correspond à tout le chemin.
trouver la version
la source
Vous devez utiliser un chemin de répertoire absolu lors de l'application de l'instruction find avec une expression régulière. Dans votre exemple, le
devrait être changé en
Dans la plupart des systèmes Linux, certaines disciplines de l'expression régulière ne peuvent pas être reconnues par ce système, vous devez donc indiquer explicitement -regexty comme
la source