GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie verwende ich Regex mit dem Find-Befehl?

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

Beachten Sie, dass Sie .*/ angeben müssen am Anfang, weil find entspricht dem gesamten Pfad.

Beispiel:

[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

Meine Version von 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'.

Die -regex Suchausdruck stimmt mit dem vollständigen Namen überein , einschließlich des relativen Pfads aus dem aktuellen Verzeichnis. Für find . diese beginnt immer mit ./ , dann beliebige Verzeichnisse.

Außerdem sind dies emacs reguläre Ausdrücke, die andere Escape-Regeln haben als die üblichen egrep regulären Ausdrücke.

Wenn diese alle direkt im aktuellen Verzeichnis liegen, dann

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

sollte arbeiten. (Ich bin mir nicht wirklich sicher - ich kann die gezählten Wiederholungen hier nicht zum Laufen bringen.) Sie können mit -regextype posix-egrep zu egrep-Ausdrücken wechseln :

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

(Beachten Sie, dass alles, was hier gesagt wird, für GNU find gilt, ich weiß nichts über BSD, das auch der Standard auf dem Mac ist.)


Nach anderen Antworten zu urteilen, scheint dies die Schuld von find zu sein.

Sie können es stattdessen aber auch so machen:

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

Möglicherweise müssen Sie das Grep ein wenig anpassen und verschiedene Optionen verwenden, je nachdem, was Sie möchten, aber es funktioniert.


Linux
  1. Verwendung des ethtool-Befehls mit Beispielen

  2. So verwenden Sie den Grep-Befehl, um Text in Dateien zu finden

  3. So verwenden Sie den Su-Befehl unter Linux

  4. So prüfen Sie Berechtigungen mit dem Befehl find

  5. So finden Sie Dateien mit dem fd-Befehl in Linux

Verwendung des RPM-Befehls (mit Beispielen)

So verwenden Sie den Linux-rm-Befehl mit Beispielen

So finden Sie Dateien mit dem fd-Befehl in Linux

So verwenden Sie den PS-Befehl

So verwenden Sie den TOP-Befehl

Verwendung des Shutdown-Befehls mit Beispielen