Am încercat să creez un șir de comandă find care va găsi toate fișierele care se termină cu un număr 1-99, dar le exclud pe toate celelalte .
de ex Vreau să găsesc myfile1 myfile99 dar nu myfile456 și nu myfilebackup
Regele la care mă gândesc este myfile[1-9]{1,2}
dar nu pot face ca acest lucru să funcționeze cu find.
find . -regex ".*myfile[0-9]{1,2}"
SAU find . -iname "myfile[0-9]{1,2}"
Din câte văd, este partea {1,2}
care nu funcționează.
(apropo puteți utiliza -name -regex
interschimbabil?)
Orice ajutor apreciat.
Comentarii
Răspuns
Ați putea încerca
find . -regex ".*myfile[0-9][0-9]?"
sau
find . \( -name "myfile[0-9][0-9]" -o -name "myfile[0-9]" \)
Comentarii
- Mulțumesc – prima linie este worki pentru mine. Încercasem acest lucru cu -iname, dar nu ' cred că acceptă sintaxa sau altfel ' fac ceva greșit.
Răspuns
Dacă aveți găsire GNU, puteți utiliza un alt tip de expresie regulată:
find . -regextype sed -regex ".*myfile[0-9]\{1,2\}"
Conform GNU find
folosește un castrat Sintaxa expresiei regulate Emacs în mod implicit – Emacs acceptă sintaxa \{from,to\}
, dar cel puțin GNU find
nu-l acceptă.
În mod ciudat, manualul de referință nu include o secțiune despre sed
sintaxa expresiei regulate, deci cine știe ce părți ale acestuia sunt acceptate.
Comentarii
-
sed
caed
pare a fi un alias pentruposix-basic
, deci ar trebui să fie compatibil cu POSIX BRE (deși acceptă unele ex tensiuni precum\+
). ' nu este compatibil cu GNUsed
unde, de exemplu,[\n]
se potrivește cu o linie nouă în loc de bara inversă saun
cerute de POSIX. Vedeți și-regextype posix-extended
pentru ERE-urile POSIX (deci.*myfile[0-9]{1,2}
), de asemenea, cu extensii precum\s
sau\<
- Nu am știut niciodată despre -regextype. Se pare că, dacă utilizați
-regextype egrep
, se pare că puteți evita barele oblice.
-iname
(și-name
) utilizați globuri , care nu nu aveți această sintaxă.