GNU/Linux >> Linux Esercitazione >  >> Linux

Come usare regex con il comando find?

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

Nota che devi specificare .*/ all'inizio perché find corrisponde all'intero percorso.

Esempio:

[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

La mia versione di 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'.

Il -regex find espressione corrisponde al nome intero , incluso il percorso relativo dalla directory corrente. Per find . questo inizia sempre con ./ , quindi qualsiasi directory.

Inoltre, questi sono emacs espressioni regolari, che hanno altre regole di escape rispetto alle solite espressioni regolari egrep.

Se questi sono tutti direttamente nella directory corrente, allora

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

dovrebbe funzionare. (Non ne sono proprio sicuro - non riesco a far funzionare la ripetizione contata qui.) Puoi passare alle espressioni egrep con -regextype posix-egrep :

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

(Nota che tutto ciò che è stato detto qui è per GNU find, non so nulla di quello BSD che è anche quello predefinito su Mac.)


A giudicare da altre risposte, sembra che potrebbe essere colpa di find.

Tuttavia puoi farlo in questo modo:

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

Potrebbe essere necessario modificare un po' il grep e utilizzare diverse opzioni a seconda di ciò che si desidera, ma funziona.


Linux
  1. Come utilizzare il comando ethtool con esempi

  2. Come utilizzare il comando Grep per trovare testo nei file

  3. Come usare il comando Su in Linux

  4. Come controllare i permessi con il comando trova

  5. Come trovare file con il comando fd in Linux

Come utilizzare il comando RPM (con esempi)

Come utilizzare il comando Linux rm con esempi

Come trovare file con il comando fd in Linux

Come usare il comando PS

Come usare il comando TOP

Come usare il comando di spegnimento con esempi