GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menggunakan regex dengan perintah find?

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

Perhatikan bahwa Anda perlu menentukan .*/ pada awalnya karena find cocok dengan seluruh jalur.

Contoh:

[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

Versi pencarian saya:

$ 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 ekspresi find cocok dengan seluruh nama , termasuk jalur relatif dari direktori saat ini. Untuk find . ini selalu dimulai dengan ./ , lalu direktori apa saja.

Juga, ini adalah emacs ekspresi reguler, yang memiliki aturan pelolosan selain ekspresi reguler egrep biasa.

Jika ini semua langsung ada di direktori saat ini, maka

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

harus bekerja. (Saya tidak begitu yakin - saya tidak dapat menghitung pengulangan yang berfungsi di sini.) Anda dapat beralih ke ekspresi egrep dengan -regextype posix-egrep :

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

(Perhatikan bahwa semua yang dikatakan di sini adalah untuk pencarian GNU, saya tidak tahu apa-apa tentang BSD yang juga merupakan default di Mac.)


Menilai dari jawaban lain, sepertinya ini salah find.

Namun Anda dapat melakukannya dengan cara ini:

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

Anda mungkin harus mengubah sedikit grep dan menggunakan opsi yang berbeda tergantung pada apa yang Anda inginkan tetapi berhasil.


Linux
  1. Cara menggunakan Perintah Su di Linux

  2. Cara mengaudit izin dengan perintah find

  3. Cara Menemukan File dengan Perintah fd di Linux

  1. Cara Menggunakan Perintah ethtool dengan Contoh

  2. Cara Menggunakan Perintah Grep untuk Menemukan Teks di File

  3. Cara Menggunakan Perintah find Linux untuk Menemukan File

  1. Cara Menemukan File di Linux Dengan Perintah Temukan

  2. Cara Menggunakan Perintah IP di Linux dengan Contoh

  3. Cara menggunakan perintah `subproses` dengan pipa