GNU/Linux >> Tutoriels Linux >  >> Linux

Comment utiliser regex avec la commande find ?

find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"

Notez que vous devez spécifier .*/ au début car find correspond à tout le chemin.

Exemple :

[email protected]:~/so$ find . -name "*.jpg"
./foo-111.jpg
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
[email protected]:~/so$ 
[email protected]:~/so$ find . -regextype sed -regex ".*/[a-f0-9\-]\{36\}\.jpg"
./test/81397018-b84a-11e0-9d2a-001b77dc0bed.jpg
./81397018-b84a-11e0-9d2a-001b77dc0bed.jpg

Ma version de find :

$ find --version
find (GNU findutils) 4.4.2
Copyright (C) 2007 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by Eric B. Decker, James Youngman, and Kevin Dalley.
Built using GNU gnulib version e5573b1bad88bfabcda181b9e0125fb0c52b7d3b
Features enabled: D_TYPE O_NOFOLLOW(enabled) LEAF_OPTIMISATION FTS() CBO(level=0) 
[email protected]:~/so$ 
[email protected]:~/so$ find . -regextype foo -regex ".*/[a-f0-9\-]\{36\}\.jpg"
find: Unknown regular expression type `foo'; valid types are `findutils-default', `awk', `egrep', `ed', `emacs', `gnu-awk', `grep', `posix-awk', `posix-basic', `posix-egrep', `posix-extended', `posix-minimal-basic', `sed'.

Le -regex trouver l'expression correspond au nom entier , y compris le chemin relatif depuis le répertoire courant. Pour find . cela commence toujours par ./ , puis tous les répertoires.

De plus, ce sont emacs 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

find . -regex '\./[a-f0-9\-]\{36\}\.jpg'

devrait marcher. (Je ne suis pas vraiment sûr - je n'arrive pas à faire fonctionner la répétition comptée ici.) Vous pouvez passer aux expressions egrep par -regextype posix-egrep :

find . -regextype posix-egrep -regex '\./[a-f0-9\-]{36}\.jpg'

(Notez que tout ce qui est dit ici est pour GNU find, je ne sais rien de celui de BSD qui est aussi celui par défaut sur Mac.)


À en juger par d'autres réponses, il semble que ce soit la faute de find.

Cependant, vous pouvez le faire de cette façon :

find . * | grep -P "[a-f0-9\-]{36}\.jpg"

Vous devrez peut-être modifier un peu le grep et utiliser différentes options en fonction de ce que vous voulez, mais cela fonctionne.


Linux
  1. Comment utiliser la commande ethtool avec des exemples

  2. Comment utiliser la commande Grep pour rechercher du texte dans des fichiers

  3. Comment utiliser la commande Su sous Linux

  4. Comment auditer les autorisations avec la commande find

  5. Comment utiliser la commande `subprocess` avec des pipes

Comment utiliser la commande RPM (avec exemples)

Comment utiliser la commande Linux rm avec des exemples

Comment rechercher des fichiers avec la commande fd sous Linux

Comment utiliser la commande PS

Comment utiliser la commande TOP

Comment utiliser la commande shutdown avec des exemples