GNU/Linux >> Znalost Linux >  >> Linux

Jak používat regex s příkazem find?

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

Všimněte si, že musíte zadat .*/ na začátku, protože find odpovídá celé cestě.

Příklad:

[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

Moje verze 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'.

-regex najít výraz odpovídá celému jménu , včetně relativní cesty z aktuálního adresáře. Pro find . to vždy začíná ./ , pak libovolné adresáře.

Toto jsou také emacs regulární výrazy, které mají jiná escapovací pravidla než obvyklé regulární výrazy egrep.

Pokud jsou všechny přímo v aktuálním adresáři, pak

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

měl by pracovat. (Opravdu si nejsem jistý – nemohu zde zprovoznit počítané opakování.) Na výrazy egrep můžete přepnout pomocí -regextype posix-egrep :

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

(Všimněte si, že vše zde uvedené je pro GNU find, nevím nic o BSD, které je také výchozí na Mac.)


Soudě podle jiných odpovědí se zdá, že to může být chyba nálezu.

Místo toho to však můžete udělat takto:

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

Možná budete muset grep trochu vyladit a použít různé možnosti podle toho, co chcete, ale funguje to.


Linux
  1. Jak používat Su Command v Linuxu

  2. Jak auditovat oprávnění pomocí příkazu find

  3. Jak používat příkaz `subprocess` s rourami

  1. Jak používat příkaz ethtool s příklady

  2. Jak používat příkaz Grep k vyhledání textu v souborech

  3. Jak najít soubory pomocí příkazu fd v Linuxu

  1. Jak najít soubory v Linuxu pomocí příkazu Najít

  2. Jak používat příkaz IP v Linuxu s příklady

  3. Jak používat Linuxový příkaz find k hledání souborů